boost 1.34中提供了FOREACH,只可惜这个实现也太丑陋了,根本没有实用价值。其实在gcc中实现foreach是相当简单的,因为 gcc 提供了typeof 关键字。
这里提供一个实现,与boost不同,用的是 iterator 的概念。
用法:
vector < string > vec;
foreach(it,vec)
{
cout << * it;
}
实现:
这里提供一个实现,与boost不同,用的是 iterator 的概念。
用法:
vector < string > vec;
foreach(it,vec)
{
cout << * it;
}
实现:
template
<
classT
>
structForeachTraits
{
typedef typename T::iteratoriterator;
};
template < classT >
structForeachTraits < const T >
{
typedef typename T::const_iteratoriterator;
};
#defineforeach(It,Container) /
for (ForeachTraits < __typeof__(Container) > ::iteratorIt = (Container).begin(),It##_e = (Container).end();It! = It##_e; ++ It)
structForeachTraits
{
typedef typename T::iteratoriterator;
};
template < classT >
structForeachTraits < const T >
{
typedef typename T::const_iteratoriterator;
};
#defineforeach(It,Container) /
for (ForeachTraits < __typeof__(Container) > ::iteratorIt = (Container).begin(),It##_e = (Container).end();It! = It##_e; ++ It)