Con*_*lor 9 c++ boost command-line-arguments boost-program-options
是否有任何方法可以使程序选项依赖于其他选项使用boost::program_options?
例如,我的程序可以接受以下示例参数:
wifi --scan --interface=en0
wifi --scan --interface=en0 --ssid=network
wifi --do_something_else
Run Code Online (Sandbox Code Playgroud)
在此示例中,interface和ssid参数仅在伴随时才有效scan.他们依赖于这个scan论点.
有没有办法自动执行此操作boost::program_options?它当然可以手动实现,但似乎必须有更好的方法.
您可以定义两个相关选项,只需定义一个小函数,如real.cpp 中所述。例如,您可以指定两个依赖(或冲突)的选项来定义一个option_dependency()函数:
void option_dependency(const boost::program_options::variables_map & vm,
const std::string & for_what, const std::string & required_option)
{
if (vm.count(for_what) && !vm[for_what].defaulted())
if (vm.count(required_option) == 0 || vm[required_option].defaulted())
throw std::logic_error(std::string("Option '") + for_what
+ "' requires option '" + required_option + "'.");
}
Run Code Online (Sandbox Code Playgroud)
然后打电话
option_dependency (vm, "interface", "scan");
option_dependency (vm, "ssid", "scan");
Run Code Online (Sandbox Code Playgroud)
紧接着 boost::program_options::store()
注意这个功能option_dependency是单向的。在这种情况下ssid需要scan选项,但不是相反。
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |