3
使用boost程序選項我試圖讓用戶在配置文件(.ini)中爲多命令參數設置默認值,它們會附加到他們的命令在線選擇。增強程序選項 - 從配置文件追加多選令牌選項到命令行
例子:
程序選項:
m_Desc.add_options()
("settings,s", po::value<string>("FILE")->default_value("~/.config.ini")->multitoken(), "Settings")
("tax,t", po::value<vector<string>>("name|rate")->multitoken(), "Tax")
;
try {
po::store(
po::command_line_parser(argc, argv).
options(m_Desc).
positional(m_Pos).
run(),
m_Vm);
ifstream config(m_Vm["settings"].as<string>(), ifstream::in);
if(config) {
po::store(
po::parse_config_file(config, m_Desc),
m_Vm);
}
if (m_Vm.count("help")) {
Usage();
return;
}
po::notify(m_Vm);
} catch(const po::error &e) {
throw MyCustomException(e.what());
}
用戶配置:
// config.ini
tax = gst|7
tax = vat|5
// What happens:
$ ./a.out --tax another|3
Tax:
another|3
$ ./a.out
Tax:
gst|7
vat|5
// What I'd like:
$ ./a.out --tax another|3
Tax:
gst|7
another|3
vat|5
$ ./a.out
Tax:
gst|7
vat|5
如何自升壓PO合併多令牌選項而不是覆蓋?
我試過將命令行和配置文件中的選項存儲在單獨的變量映射中,然後合併,但這成爲我的其他命令行選項的問題。
啊,小東西我錯過了(www.boost.org/doc/libs/1_55_0/doc/html/program_options/tutorial.html) 。 '對於「組成」選項,如「包含文件」,這些值將被合併。 」。謝謝! –