促进计划选择和 "one of" 关系

Boost program options and "one of" relationships

我只想允许多个选项中的一个,即 --frequency=<x>--wavelength=<x>--energy=<x>,但不能超过其中一个。有没有办法使用增强程序选项来做到这一点?

tutorials 之一显示了处理互斥选项。基本思想是定义一个函数来检查是否存在一对选项并根据您的选择处理该条件。这是一个手动过程,库中没有内置任何东西来为您执行检查。

void conflicting_options(const bpo::variables_map& vm, 
                         const char* opt1, const char* opt2)
{
    if (vm.count(opt1) && !vm[opt1].defaulted() 
        && vm.count(opt2) && !vm[opt2].defaulted())
        throw std::logic_error(std::string("Conflicting options '") 
                               + opt1 + "' and '" + opt2 + "'.");
}

然后在你解析命令行后

bpo::store(bpo::parse_command_line(argc, argv, desc), vm);

conflicting_options(vm, "frequency", "wavelength");
conflicting_options(vm, "frequency", "energy");
conflicting_options(vm, "wavelength", "energy");

Live demo