Cocos2d-x中的CCARRAY_FOREACH的使用

本文介绍了Cocos2d-x框架中的CCARRAY_FOREACH宏,用于便利地遍历__Array对象。内容包括CCARRAY_FOREACH的定义、工作原理,以及与C++11范围for循环的比较,提供了基本的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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去用就可以。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值