c++ - 指定 boost::program_options 值的允许值范围

标签 c++ boost boost-program-options

我想对命令行中指定的值设置限制。如果这个范围能够自动打印在默认值等描述中,那就太好了。

如果有一种方法可以创建我自己的类型并进行 po::value 的专门化,那也很有趣。对于我的枚举类型。

例如

enum percent
{
   percent0,
   percent10,
   percent20,
   percent30,
   percent40,
   ...
   percent100
};

po::value<percent>() <-- gives compile time error

更新

我想将有关允许值的信息添加到 value_semantic对象,就像对默认值或所需标志所做的那样。

我注意到typed_value类是多态的并且可以扩展,所以我想创建一个新的类

class range_int : public po::typed_value<int> {}

稍后在迭代描述选项时我可以这样做 dynamic_cast<>并检查 value 是否为 range_int,但我不喜欢这个解决方案,因为它需要强制转换,但无法将虚拟函数添加到基本接口(interface)。

这样做的目的是扩展程序选项。我需要编写另一个描述输出函数,它将以易于解析的格式(例如 XML)输出程序选项。我还需要为某些值添加范围,因此我需要将此信息存储在程序选项中。

有什么建议吗?

最佳答案

您可以尝试使用custom validator使用自定义类型来保存您的信息。 提供的示例是不言自明的

关于c++ - 指定 boost::program_options 值的允许值范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19686387/

相关文章:

c++ - 如何在 64 位 osx 上为 i386 构建 boost?

c++ - boost::hash_combine 中的魔数(Magic Number)

java - ORBInitialHost 参数

c++ - boost::option_description 获取默认值

c++:程序设置 - boost.PropertyTree 或 boost.program_options?

c++ - 如何删除 "Ctrl + Backspace"特殊字符?

c++ - 在 C++ 中重用异常处理代码

c++ - 无法在 VS 2010 中编译 Vcg 库

ios - 如何将 boost 编译成 .a 库以用于 xcodeproj?

c++ - 二进制搜索 C++,STATUS_ACCESS_VIOLATION