指定 boost::p rogram_options 值的允许值范围

specify allowed value range for boost::program_options value

本文关键字:许值 范围 boost rogram 指定 options      更新时间:2023-10-16

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

如果有一种方法可以创建我自己的类型并为我的枚举类型进行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<>并检查值是否range_int,但我不喜欢这个解决方案,因为它需要 cast,但是没有办法将虚拟函数添加到基本接口。

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

有什么建议吗?

您可以尝试使用具有自定义类型的自定义验证器来保存您的信息。提供的示例是不言自明