我有一个自定义的C++宏来模拟foreach循环:
#define foreach(TYPE, ELEMENT, COLLECTION_TYPE, COLLECTION)\
for(COLLECTION_TYPE::iterator ELEMENT##__MACRO_TEMP_IT = COLLECTION.begin(); ELEMENT##__MACRO_TEMP_IT != COLLECTION.end(); ELEMENT##__MACRO_TEMP_IT++) \
{ TYPE ELEMENT = *(ELEMENT##__MACRO_TEMP_IT);
我知道有其他的方法来完成foreach循环——可以使用C ++ 11,STL,Qt或Boost的foreach函数,但是为了练习,我尝试自定义解决方案。
问题是,这个宏要么以两个括号结尾(“}}”),要么省略第一个括号并以一个括号结尾,就像这样:
foreach(int, i, std::list<int>, indexes)
{
//do stuff
}}
或者
foreach(int, i, std::list<int>, indexes)
//do stuff
}
我在想:有没有一个聪明的宏变通方法来解决这个问题,使得可以按照以下方式使用这个宏?
foreach(int, i, std::list<int>, indexes)
{
//do stuff
}
__
的标识符都是保留的。 - Piotr Skotnicki