gpt4 book ai didi

c++ - boost::program_options: 发现未记录的 "*"功能,现在需要写入 map 的自定义验证器

转载 作者:IT老高 更新时间:2023-10-28 21:43:26 26 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

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

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

迭代选项似乎更容易理解(实现和阅读),但自定义解析器似乎也不错(尽管我从未使用过)。

关于c++ - boost::program_options: 发现未记录的 "*"功能,现在需要写入 map 的自定义验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14384112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com