我们如何向用户创建或显示错误或警告他/她 不能输入与另一个输入的值相反的标志 举报或表明他/她做出了无效论证。
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 );
答案 0 :(得分:1)
#include <cassert>
assert(p_Flag & (Flags::Yes|Flags::No) != (Flags::Yes|Flags::No))