2013-02-28 2 views
0

사용자에게 플래그를 입력하여 다른 입력 된 값의 반대 값을 가진 플래그를 입력 할 수 없거나 사용자에게 표시 할 수있는 방법 또는 경고를 표시하거나 나타내려면 어떻게합니까? 잘못된 주장을했다.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 당신은 단순히 일부 플래그는 다른 사람보다 우선 해당 문서 수 –

+2

보는 가치가 될 수있다, 즉, 암시의 존재는 내가하여야한다 B. –

+0

@Ed S.을 사용하지 않습니다. – CLearner

답변

1
#include <cassert> 

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