c++ - 升压程序选项中的互斥选项集

标签 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 

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()之后

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

关于c++ - 升压程序选项中的互斥选项集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15577107/

相关文章:

c++ - 为随机和用户输入的 C++ 代码处理命令行参数

c++ - 使用 OpenMP 编译 smallpt 导致运行时死循环

C++ bind第二题

c++ - 整合 'google test' 和 'boost program options'

java - 从命令行启动 android 测试时的自定义参数

命令行参数 C

结合查找和有序数据的 C++ 数据结构

c++ - "extern C++"是如何工作的?

c++ - 限制 std::cout 中 boost::options_description 中默认值的精度

c++ - 具有隐含值的Boost程序选项错误地获取位置选项的值