boost 1.34中提供了FOREACH,只可惜这个实现也太丑陋了,根本没有实用价值。其实在gcc中实现foreach是相当简单的,因为 gcc 提供了typeof 关键字。
这里提供一个实现,与boost不同,用的是 iterator 的概念。
用法:

vector<string>vec;
foreach(it,vec)
{
cout<<*it;
}
实现:
template<classT>
structForeachTraits
{
typedeftypenameT::iteratoriterator;
};

template<classT>
structForeachTraits<constT>
{
typedeftypenameT::const_iteratoriterator;
};


#defineforeach(It,Container)/
for(ForeachTraits<__typeof__(Container)>::iteratorIt=(Container).begin(),It##_e=(Container).end();It!=It##_e;++It)
这里提供一个实现,与boost不同,用的是 iterator 的概念。
用法:

vector<string>vec;
foreach(it,vec)
{
cout<<*it;
}
实现:
template<classT>
structForeachTraits
{
typedeftypenameT::iteratoriterator;
};
template<classT>
structForeachTraits<constT>
{
typedeftypenameT::const_iteratoriterator;
};

#defineforeach(It,Container)/
for(ForeachTraits<__typeof__(Container)>::iteratorIt=(Container).begin(),It##_e=(Container).end();It!=It##_e;++It)
本文介绍了一种使用GCC的typeof关键字实现foreach循环的方法。不同于Boost 1.34中提供的FOREACH宏,该实现利用迭代器概念,使得遍历容器更加简洁高效。文中给出了具体的实现代码及使用示例。
2302

被折叠的 条评论
为什么被折叠?



