use*_*484 22 c++ boost boost-program-options
我最近发现了一个未记录的功能boost::program_options,即它接受"*"作为一个特殊的通配符,允许声明一组具有相同前缀的选项,如下所示:
configOptions.add_options()
("item_*", value<int>(), "items");
Run Code Online (Sandbox Code Playgroud)
该声明担任预期和认可item_1,item_3等等,而拒绝未知选项.那么问题是,如何编写一个自定义验证函数,它将使用options键及其值填充映射,如下所示:
map<string, int> itemsMap;
options_description items("items options");
items.add_options()
("item_*",value<map<string, int>>(&itemsMap)->multitoken(), "items")
;
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 如何从validate()函数中获取验证选项的密钥?
template <typename T> void validate(boost::any& v, const std::vector<std::string>& values, map<string, T> *, int)
Run Code Online (Sandbox Code Playgroud)
您需要迭代所有参数,以确定哪些参数具有正确的前缀或编写自定义解析器。这两个选项的说明位于以下链接的正确答案中:
boost::program_options:带有固定和可变标记的参数?
迭代选项可能看起来更容易理解(实现和阅读),但自定义解析器似乎也不错(尽管我从未使用过它)。