当前位置:  开发笔记 > 编程语言 > 正文

gcc&cpp中的"foreach values"宏

如何解决《gcc&cpp中的"foreachvalues"宏》经验,为你挑选了1个好方法。

我有一个'foreach'宏我经常在C++中使用,适用于大多数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();
}

我想做一些类似迭代地图值的东西.也许称之为"foreach_value".所以不要写作

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

我会写的

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

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



1> Tom Leys..:

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

如果你想要自己动手,可以在C++的任何地方声明一个块,这可以解决你的中间存储器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
}

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有