2015-10-16 40 views
3

使用bool_switch,我可以寫一個命令行選項來打開一個國旗:升壓program_options開/關標誌

bool flag; 

po::options_description options; 
options.add_options() 
    ("on", po::bool_switch(&flag)->default_value(false)) 
    ; 

現在在哪裏./a.out將有flag==false./a.out --on將有flag==true。但是,對於被明確的目的,我會另外想添加命令行選項來打開標誌關閉。喜歡的東西:

options.add_options() 
    ("on", po::bool_switch(&flag)->default_value(false)) 
    ("off", po::anti_bool_switch(&flag)) // ???? 
    ; 

有沒有辦法做到在program_options庫anti_bool_switch,或者我基本上都寫一個代理布爾參考?

回答

0

有一件事情我已經能夠拿出(不知道這是最好的方法)是使用implicit_value()

po::typed_value<bool>* store_bool(bool* flag, bool store_as) 
{ 
    return po::value(flag)->implicit_value(store_as)->zero_tokens(); 
} 

value必須使用所需的缺省初始化,否則這滿足所需功能:

bool value = false; 
options.add_options() 
    ("on", store_bool(&value, true)) 
    ("off", store_bool(&value, false)) 
    ; 
1

我不確定您的要求是否合理。如果用戶輸入「./a.out --on --off」,會發生什麼?

否則,所有你需要的是確保你沒有得到一個「無法識別的選項」消息,如果用戶鍵入「./a.out --off」,你會得到你想要的行爲。

bool flag; 
bool flag_off 

po::options_description options; 
options.add_options() 
    ("on", po::bool_switch(&flag)->default_value(false)) 
    ("off", po::bool_switch(&flag_off)->default_value(false)) ; 

... 

if(flag_on && flag_off) 
{ 
    cout << "nasty error" << endl; exit(1) 
}