gpt4 book ai didi

c++ - Boost Program Options 依赖选项

转载 作者:可可西里 更新时间:2023-11-01 16:42:03 25 4
gpt4 key购买 nike

有没有办法使用 boost::program_options 使程序选项依赖于其他选项?

例如,我的程序可以接受以下示例参数:

wifi --scan --interface=en0
wifi --scan --interface=en0 --ssid=network
wifi --do_something_else

在此示例中,interfacessid 参数仅在它们伴随有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 + "'.");
}

然后调用

option_dependency (vm, "interface", "scan");
option_dependency (vm, "ssid", "scan");

boost::program_options::store() 之后

请注意,此函数 option_dependency 仅是单向的。在这种情况下,ssid 需要 scan 选项,但反之则不然。

关于c++ - Boost Program Options 依赖选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38289101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com