2016-08-29 57 views
2

我想使用Boost program_options來解析我的程序輸入。一般來說,文檔提供瞭解析所需的信息。但是,我想讓我的程序在沒有提供輸入時打印使用說明,我似乎無法弄清楚。似乎沒有「默認」選項,我也找不到如何計算提供的輸入數量(測試)。Boost :: program_options - 如果沒有輸入提供的打印用法

這是我的代碼的時刻:

boost::program_options::options_description help("Usage"); 
help.add_options() 
    ("help", "print help info"); 

boost::program_options::options_description req("Required inputs"); 
req.add_options() 
    ("root", boost::program_options::value<std::string>(&images_root), "Root directory") 

boost::program_options::options_description opt("Option inputs"); 
opt.add_options() 
    ("verbose", boost::program_options::value<bool>(&verbose)->implicit_value(1), "Verbose"); 

boost::program_options::variables_map vm; 
boost::program_options::store(boost::program_options::parse_command_line(argc, argv, all), vm); 
if (vm.count("help")) 
{ 
    std::cout << help; 
    return 1; 
} 

boost::program_options::notify(vm); 

我怎麼能生產出以下(即,如果沒有輸入做std::cout << help)?

./test-file 
>> print help info 
+0

如何自定義的驗證功能? – Shravan40

回答

1

您可以用argc

例如做到這一點:

int main(int argc, char** argv) 
{ 
    if(argc <= 1) 
     std::cout << "Print Usage\n"; 

    return 0; 
} 
+0

我同意@Roby。在這種情況下,只需將if(vm.count(「help」))'改爲if(vm.count(「help」)||(argc == 0))' – kenba

+0

@kenba,你錯了。 0參數是程序名本身(即如果沒有解析參數,argh是1) – Roby

+1

對不起@Roby,所以它變成了'if(vm.count(「help」)||(argc <= 1))'而不是。順便說一句,它通常是'int main(int argc,char ** argv)'而不是兩個'argc' ... – kenba

相關問題