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宏,该实现利用迭代器概念,使得代码更加简洁易读。通过定义模板特化来获取容器的迭代器类型,并使用预处理器宏简化foreach循环的书写。
2303

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



