我最近发现了 的一个未记录的特性boost::program_options
,即它接受“*”作为特殊通配符,允许声明一组具有相同前缀的选项,如下所示:
configOptions.add_options()
("item_*", value<int>(), "items");
此声明按预期工作并认可item_1
,item_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)