boost程序选项中互斥选项的集合

Sets of mutually exclusive options in boost program options

本文关键字:选项 集合 程序 boost      更新时间:2023-10-16

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

  • -b-p必须一起指定,组成一个集合,并且具有数值,例如-b 42
  • -s不能用上述集合指定,反之
  • -P在这两种情况下都是强制性的

因此prog.exe只能作为

运行
prog.exe -P -s 

prog.exe -P -b -42 -p 8

是否有办法在boost程序选项中指定上述互斥命令行选项集?

您应该从一些教程[1][2]开始了解boost::program_options的工作原理。

然后,您可以像real.cpp中解释的那样,简单地定义一个小函数来定义两个互斥的选项。例如,您可以指定两个相互冲突(或依赖)的选项来定义conflicting_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_options::store()

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