gpt4 book ai didi

c++ - BOOST_FOREACH 和没有 typedef 的模板

转载 作者:可可西里 更新时间:2023-11-01 15:37:15 25 4
gpt4 key购买 nike

当我使用 BOOST_FOREACH 时,简单的模板作为 vector 没有问题。但是,当我尝试遍历 map > 例如,我需要对元素类型进行 typedef。

有什么解决方法吗?

最佳答案

有一个问题,因为它是一个宏,因此不能处理包含逗号的类型(预处理器不知道模板)。

您也可以在循环之前声明变量,参见documentation .

std::map<int, double> my_map;

//1)
typedef std::pair<int, double> MyPair;
BOOST_FOREACH(MyPair p, my_map) { ... }

//2)
std::pair<int, double> p;
BOOST_FOREACH(p, my_map) { ... }

编辑:

std::map 更加复杂特别是:value_type不是 std::pair<Key, Value> ,但是std::pair<const Key, Value> .

因此,如果您使用 typedef,更合适的方法(如果您想在 foreach 循环中使用 reference 也是唯一的方法)是使用

typedef std::pair<const int, double> MyPair;
//or
typedef std::map<int, double>::value_type MyPair;

BOOST_FOREACH(MyPair& ref, my_map) { ... }

但是,如果您想使用在循环之前声明的变量,那将不起作用,因为您不能分配给 std::pair<const int, double>。实例稍后(不能分配给 const 字段),在这种情况下你只能使用 pair<int, double>正如 boost 的手册所示。

关于c++ - BOOST_FOREACH 和没有 typedef 的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1713653/

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