boost :: program_options:发现了未记录的“*”功能,现在需要写入地图的自定义验证器

时间:2013-01-17 16:54:50

标签: c++ boost boost-program-options

我最近发现了一个boost::program_options的未记录的功能,即它接受“*”作为一个特殊的通配符,允许声明一组具有相同前缀的选项,如下所示:

configOptions.add_options()
    ("item_*", value<int>(), "items");

此声明按预期工作并识别item_1item_3等,同时拒绝未知选项。 那么问题是,如何编写自定义验证功能 这将使用选项键及其值填充地图,如下所示:

map<string, int> itemsMap;
options_description items("items options");
    items.add_options()
        ("item_*",value<map<string, int>>(&itemsMap)->multitoken(), "items")
    ;

我的问题是 - 如何从validate()函数中获取验证选项的密钥?

template <typename T> void validate(boost::any& v, const std::vector<std::string>& values, map<string, T> *, int)

1 个答案:

答案 0 :(得分:1)

您需要遍历所有标识具有正确前缀的参数或编写自定义解析器。这两个选项的说明都在以下链接的正确答案中:

boost::program_options: parameters with a fixed and a variable token?

迭代选项可能看起来更容易理解(实现和读取),但自定义解析器似乎也很好(尽管我从未使用它)。