c++ 宏定义
c++ 的宏定义 有助于提高开发的效率,方便快捷,并且提高程序的执行效率
宏可以定义一个带参数的宏 或者 不带参数的宏
带参数的宏定义 宏名和参数之间一定不能有空格,否则参数会被当做宏体处理
带参数宏定义:#define <宏名>(<参数表>) <宏体>
eg:#define SUB(a,b) a-b
#define NS_CC_BEGIN namespace cocos2d {
#define NS_CC_END }
#define USING_NS_CC using namespace cocos2d
#else
#define NS_CC_BEGIN
#define NS_CC_END
#define USING_NS_CC
#endif
* define a create function for a specific type, such as CCLayer
* @__TYPE__ class type to add create(), such as CCLayer
*/
#define CREATE_FUNC(__TYPE__) \
static __TYPE__* create() \
{ \
__TYPE__ *pRet = new __TYPE__(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
}
#define CC_ENABLE_CACHE_TEXTURE_DATA 1
#else
#define CC_ENABLE_CACHE_TEXTURE_DATA 0
#endif
这个宏声明了一个protected 属性变量,使用CC_PROPERTY声明的变量可以使用getter获取变量的值,使用setter设置变量的值,当然可以通过此方法声明一个private的属性变量宏,用法一样
#define CC_PROPERTY(varType, varName, funName)\
protected: varType varName;\
public: virtual varType get##funName(void);\
public: virtual void set##funName(varType var);
具体的用法为:
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
USING_NS_CC;
using namespace std;
class HelloWorld : public CCLayer
{
public:
virtual bool init();
static CCScene* scene();
CREATE_FUNC(HelloWorld);
CC_PROPERTY(unsigned int, _heroID, HeroID);
CC_PROPERTY(string, _heroName, HeroName);
};
#endif // __HELLOWORLD_SCENE_H__
定义一个函数用于生成一个类的实例
#define TESTLAYER_CREATE_FUNC(className) \
static CCLayer* create##className() \
{ return new className(); }
定义一个函数用于生成一个类的实例同时调用上面的方法
#define CF(className) create##className
在这里需要注意的是,定义的get和set方法必须要重写 才能使用,因为他们的格式为virtual
以上所有的宏定义都是参考cocos2dx的源码定义,cocos2dx中定义了非常多的宏,来提高开发效率和程序性能,有兴趣的可以读一下cocos2dx的代码
上一篇: 编写PHP扩展函数需要了解的宏定义