提升计划选项和“其中一种”关系

时间:2015-03-10 23:30:27

标签: c++ boost boost-program-options

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

1 个答案:

答案 0 :(得分:1)

处理互斥选项显示在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