2013-02-28 95 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可能是值得考慮的 – 2013-02-28 05:36:23

+2

你可以簡單地記錄一些標誌優先於其他人,即的隱含存在禁用B. – 2013-02-28 05:38:40

+0

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

回答

1
#include <cassert> 

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