C ++检查函数的“flag参数”

时间:2013-02-28 05:32:35

标签: 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 个答案:

答案 0 :(得分:1)

#include <cassert>

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