用于STL Iterables的迭代器循环的宏

Pat*_*ini 7 c++ generics macros iterator stl

概念

所以,我正在尝试定义一个宏来简化以下代码:

for (vector<TYPE>::iterator iter = iterable.begin(); 
             iter != iterable.end(); iter++)
Run Code Online (Sandbox Code Playgroud)

for (map<TYPE, TYPE>::iterator iter = iterable.begin();
             iter != iterable.end(); iter++)
Run Code Online (Sandbox Code Playgroud)

等等

现有工作

到目前为止,我已经有了

#define every(iter, iterable) ::iterator iter = iterable.begin(); iter != iterable.end(); iter++
for (vector<TYPE> every(iter, iterable))
Run Code Online (Sandbox Code Playgroud)

但我想进一步简化这一点.

目标

理想情况下,我希望能够做到

for (every(iter, iterable))
Run Code Online (Sandbox Code Playgroud)

这意味着我需要以某种方式获得class<TYPE>可迭代对象.这可能吗?如果是这样,我该怎么办?

规定

  • 理想情况下,这需要进入已设置为访问iterator对象的(相对)大型代码库.
  • 我正在运行一个编译器pre-C++ 11

胜利

#define every(iter, iterable) typeof(iterable.begin()) iter = iterable.begin(); iter != iterable.end(); iter++
for (every(iter, iterable))
Run Code Online (Sandbox Code Playgroud)

Aar*_*aid 8

这个答案并不能依赖于C++ 11,但它需要typeof,其中一些编译器可能没有.应该适用于任何最近的g ++

#define For(iter, iterable) for(typeof((iterable).begin()) iter = (iterable).begin(); iter != (iterable).end(); ++iter)
Run Code Online (Sandbox Code Playgroud)