C++ boost程序选项中的互斥选项集

C++ boost程序选项中的互斥选项集,c++,boost-program-options,command-line-arguments,C++,Boost Program Options,Command Line Arguments,我的程序(prog.exe)支持以下四个标志:-p、-p、-b和-s。然而: -b和-p必须一起指定,构成一个集合,并具有数值,例如-b 42 -s不能与上述设置一起指定,反之亦然 -P在这两种情况下都是强制性的 因此,prog.exe只能作为 prog.exe -P -s 或 有没有办法在boost程序选项中指定上述相互排斥的命令行选项集?您应该从一些教程开始,了解boost::program_选项的工作原理 然后,您可以定义两个互斥选项,只需定义一个小函数,如中所述。例如,您可以指定

我的程序(
prog.exe
)支持以下四个标志:
-p
-p
-b
-s
。然而:

  • -b
    -p
    必须一起指定,构成一个集合,并具有数值,例如
    -b 42
  • -s
    不能与上述设置一起指定,反之亦然
  • -P
    在这两种情况下都是强制性的
因此,
prog.exe
只能作为

prog.exe -P -s 


有没有办法在boost程序选项中指定上述相互排斥的命令行选项集?

您应该从一些教程开始,了解boost::program_选项的工作原理

然后,您可以定义两个互斥选项,只需定义一个小函数,如中所述。例如,您可以指定两个冲突(或取决于)选项来定义
冲突的\u options()
函数:

void conflicting_options(const boost::program_options::variables_map & vm,
                         const std::string & opt1, const std::string & 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 + "'.");
    }
}
然后打电话

conflicting_options (vm, "quiet", "verbose");
紧跟在boost::program\u options::store()之后


我仍然不明白是否可以定义两个相互排斥的位置选项,但这应该是另一个问题。

这是在
boost::program\u options
客户端应用程序IMHO的(强制)
parseOptions()方法中实现的逻辑的一部分。我遇到过这种情况,通常将它们映射到一些“程序执行模式”枚举选项。我首先查找此选项设置,确定后,继续执行特定选项…在我看来,这是太多的样板代码了!为什么不支持支持Python的AgPARSE互斥的类呢?Python几乎总是比C++更简洁,它一直是。C++11/14/17正朝着这个方向前进,但步伐缓慢。
conflicting_options (vm, "quiet", "verbose");