0

我们如何创建或显示错误或警告,告诉用户他/她不能输入与另一个已经输入的标志具有相反值的标志?我们如何证明用户使用了无效的参数?

演示问题的示例:

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 );
4

1 回答 1

1
#include <cassert>

assert(p_Flag & (Flags::Yes|Flags::No) != (Flags::Yes|Flags::No))
于 2013-02-28T05:41:55.400 回答