C++检查函数的“标志参数”

问题描述:

我们如何创建或向用户显示错误或警告,他/她 无法输入具有与其他输入 标志相反值的标志或显示他/她已经提出了无效的论点。C++检查函数的“标志参数”

struct Flags 
{ 
    enum Values 
    { 
     None = 0, 
     Yes = 1, 
     No = 2, 
     Good = 4, 
     Bad = 8 
    }; 
}; 

void Function(__in int p_Flag) 
{ 
    if(p_Flag & Flags::Yes) 
     std::cout << "Yes\n"; 
    else if(p_Flag & Flags::No) 
     std::cout << "No\n"; 

    if(p_Flag & Flags::Good) 
     std::cout << "Good\n"; 
    else if(p_Flag & Flags::Bad) 
     std::cout << "Bad\n"; 
}; 

int main(void) 
{ 
    Function(Flags::Yes | Flags::No);   // Error/warning (not OK) 
    Function(Flags::Good | Flags::Bad);  // Error/warning (not OK) 
    Function(Flags::Yes | Flags::Bad);  // OK! 

    return(0); 
}; 

虽然第一个相反的国旗将在其他选择,我们应该仍然显示警告或错误,以确保该标志,用户真正需要的。

Function(Flags::Yes | Flags::No); 
+1

static_assert可能是值得考虑的 – 2013-02-28 05:36:23

+2

你可以简单地记录一些标志优先于其他人,即的隐含存在禁用B. – 2013-02-28 05:38:40

+0

@Ed S.我应。 – CLearner 2013-02-28 05:39:21

#include <cassert> 

assert(p_Flag & (Flags::Yes|Flags::No) != (Flags::Yes|Flags::No))