gpt4 book ai didi

c++ - gcc 和 cpp 中的 "foreach values"宏

转载 作者:IT老高 更新时间:2023-10-28 23:14:31 32 4
gpt4 key购买 nike

我有一个在 C++ 中经常使用的“foreach”宏,它适用于大多数 STL 容器:

#define foreach(var, container) \
for(typeof((container).begin()) var = (container).begin(); \
var != (container).end(); \
++var)

(注意'typeof'是一个gcc扩展。)它是这样使用的:

std::vector< Blorgus > blorgi = ...;
foreach(blorgus, blorgi) {
blorgus->draw();
}

我想做一些类似的东西来迭代 map 的值。也许称它为“foreach_value”。所以不要写

foreach(pair, mymap) {
pair->second->foo();
}

我会写

foreach_value(v, mymap) {
v.foo();
}

我想不出一个可以做到这一点的宏,因为它需要声明两个变量:迭代器和值变量(上面的'v')。我不知道如何在 for 循环的初始化程序中执行此操作,即使使用 gcc 扩展也是如此。我可以在 foreach_value 调用之前声明它,但是它会与同一范围内的 foreach_value 宏的其他实例发生冲突。如果我可以将当​​前行号作为迭代器变量名称的后缀,它会起作用,但我不知道该怎么做。

最佳答案

您正在寻找 BOOST_FOREACH - 他们已经为您完成了所有工作!

如果您确实想自己滚动,您可以在 C++ 中的任何位置声明一个 block ,这解决了您的 itr->second 中间存储的范围问题...

// Valid C++ code (which does nothing useful)
{
int a = 21; // Which could be storage of your value type
}
// a out of scope here
{
int a = 32; // Does not conflict with a above
}

关于c++ - gcc 和 cpp 中的 "foreach values"宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/78717/

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