【发布时间】:2011-12-09 01:12:11
【问题描述】:
概念
所以,我正在尝试定义一个宏来简化以下代码:
for (vector<TYPE>::iterator iter = iterable.begin();
iter != iterable.end(); iter++)
和
for (map<TYPE, TYPE>::iterator iter = iterable.begin();
iter != iterable.end(); iter++)
等等
现有工作
到目前为止,我有
#define every(iter, iterable) ::iterator iter = iterable.begin(); iter != iterable.end(); iter++
for (vector<TYPE> every(iter, iterable))
但我想进一步简化。
目标
理想情况下,我希望能够做到
for (every(iter, iterable))
这意味着我需要以某种方式获取可迭代对象的class<TYPE>。这可能吗?如果是这样,我该怎么做?
规定
- 理想情况下,这需要进入已设置的(相对)大型代码库以访问
iterator对象。 - 我在 C++11 之前的编译器上运行
胜利
#define every(iter, iterable) typeof(iterable.begin()) iter = iterable.begin(); iter != iterable.end(); iter++
for (every(iter, iterable))
【问题讨论】:
-
你能用C++11和
decltype吗?如果没有,你可以写一个小的 trait 类。
标签: c++ generics stl macros iterator