提升计划选择权

Rug*_*rra 5 c++ boost-program-options command-line-parsing

有没有一种简单的方法来检查选项的参数是否在一组预定义的选择中?这里的"简单"意味着没有定义ad-hoc类.

假设我有选项--myoption必须有价值"myvalue1""myvalue2"

例如,在python中,optparse中的选项选项非常简单

Avi*_*vio 0

正如我刚刚意识到的,您可以定义两个互斥的选项,只需定义一个小函数,如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 + "'.");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后打电话

conflicting_options (vm, "quiet", "verbose");
Run Code Online (Sandbox Code Playgroud)

就在之后boost::program_options::store()

检查是否--myoption等于myvalue1myvalue2然后就变成了函数调用的问题。

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