您的位置:首页 > 移动开发 > Cocos引擎

Cocos2d-x中的CCARRAY_FOREACH的使用

2015-07-22 16:36 423 查看
CCARRAY_FOREACH是Cocos2d-x中经常被用到的一个宏,它提供了对__Array的正向遍历。

CCARRAY_FOREACH的定义如下:

#define CCARRAY_FOREACH(__array__, __object__) \
if ((__array__) && (__array__)->data->num > 0) \
for(Ref** __arr__ = (__array__)->data->arr, **__end__ = (__array__)->data->arr + (__array__)->data->num-1;\
__arr__ <= __end__ && (((__object__) = *__arr__) != NULL/* || true*/);\
__arr__++)
首先判断数组是否存在以及数组元素个数是否大于零。

然后在for循环的初始化语句中,__arr__是一个二重指针被定义指向数组__array__,指向数组的名字就是指向数组的第一个元素,所以__arr__就是指向了数组__array__的第一个元素。__end__则是指向了数组__array__的最后一个元素。在for循环的循环条件中,比较__arr__与__end__,然后将当前__arr__指向的元素赋值给变量__object__,赋值运算符返回一个左边变量的指针,通过判断其是否为NULL来判断赋值是否成功。最后在for循环的表达式中,将__arr__自加,作用是将指针后移。

通过以上分析,可以发现CCARRAY_FOREACH跟C++11中的范围for很类似,用法也类似,只不过参数中的__object__需要在前面定义完成。

CCARRAY_FOREACH的基本用法如下:

__Array* array = __Array::create();
Ref* obj;
CCARRAY_FOREACH(array, obj){
//调用obj进行操作
}
范围for的基本用法如下:

std::string str("Hello World");
for(auto c : str){
std::cout<< c <<std::endl;
}
可以发现用法基本是一样的,所以就把CCARRAY_FOREACH当成范围for去用就可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息