互斥选项组

时间:2015-03-10 09:47:45

标签: c++ boost-program-options

我熟悉了boost的程序选项实用程序,我想知道是否有一种定义互斥选项组的方法。 即,我的程序有不同的流程:

  

program --first --opt1 --opt2 ...
  program --second --opt3 --opt4 ...

因此,我对不同流程的选择是相互排斥的。 有没有办法定义互斥的选项组?

当然,下面的代码会这样做:

 /* Function used to check that 'opt1' and 'opt2' are not specified
   at the same time. */
void conflicting_options(const variables_map& vm, 
                         const char* opt1, const char* opt2)
{
    if (vm.count(opt1) && !vm[opt1].defaulted() 
        && vm.count(opt2) && !vm[opt2].defaulted())
        throw logic_error(string("Conflicting options '") 
                          + opt1 + "' and '" + opt2 + "'.");
}
int main(int ac, char* av[])
{
    try {
        // Declare three groups of options.
        options_description first("First flow options");
        first.add_options()
            ("first", "first flow")
            ("opt1", "option 1")
            ("opt2", "option 2")
            ;

        options_description second("Second flow options");
        second.add_options()
            ("second", "second flow")
            ("opt3", "option 3")
            ("opt4", "option 4")
            ;

        // Declare an options description instance which will include
        // all the options
        options_description all("Allowed options");
        all.add(first).add(second);

        variables_map vm;
        store(parse_command_line(ac, av, all), vm);

        conflicting_options(vm, "first", "second");
        conflicting_options(vm, "first", "opt3");
        conflicting_options(vm, "first", "opt4");
        conflicting_options(vm, "second", "opt1");
        conflicting_options(vm, "first", "opt2");
    }
     catch(std::exception& e)
    {
        cout << e.what() << "\n";
        return 1;
    }    
    return 0;
}

但是我有太多的选择,因此,仅对群组进行检查会很好。

提前致谢!

0 个答案:

没有答案