有没有一种简单的方法来检查选项参数是否在预定义的选择集合内?这里的“简单”意味着不需要定义一个临时类。
假设我有一个选项--myoption
,它必须具有值"myvalue1"
或"myvalue2"
例如,在Python中使用 optparse 中的 choices 选项非常容易。
有没有一种简单的方法来检查选项参数是否在预定义的选择集合内?这里的“简单”意味着不需要定义一个临时类。
假设我有一个选项--myoption
,它必须具有值"myvalue1"
或"myvalue2"
例如,在Python中使用 optparse 中的 choices 选项非常容易。
正如我刚刚意识到的那样,你可以通过定义一个小函数来定义两个互斥的选项,就像在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()
之后
检查 --myoption
是否等于 myvalue1
或 myvalue2
现在只是一个函数调用的问题。
我仍然不明白是否可能定义两个互斥的位置选项,但这应该是另一个问题。
std::string
类型,你可以这样写:if ((arg == myvalue1) || (arg == myvalue2))
。 - Jesse Good--myoption myvalue3
,程序应该引发异常。 - Ruggero Turra