我熟悉了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;
}
但是我有太多的选择,因此,仅对群组进行检查会很好。
提前致谢!