【发布时间】:2013-10-26 18:34:27
【问题描述】:
我正在使用来自 post 的宏循环我的参数。一切都很好!但是,有没有办法将这两个 CCB_CREATE 和 CCB_CREATE_MORE 结合起来?
我需要提取第一个参数object_type 来编写附加代码。额外的object_types 将使用FOR_EACH 循环插入到地图中。
当我使用CCB_CREATE_MORE(Type1) 时只有一个参数时,编译器会抱怨。为了解决这个问题,我制作了另一个宏来处理 CCB_CREATE(Type1)。希望找到一个聪明的解决方案,将这两者结合成一个优雅的宏。有什么想法吗?
#define INSERT_LOADER_MAP(object_type) loader_map.insert(make_pair(#object_type, object_type##Loader::loader()))
#define CCB_CREATE_MORE(object_type,...) \
static CCNode * create##object_type##Node() { \
std::map<std::string, CCNodeLoader*> loader_map; \
std::string classname = #object_type; \
FOR_EACH(INSERT_LOADER_MAP,object_type,__VA_ARGS__); \
return loadCCBFile((classname + ".ccbi").c_str(), loader_map); \
}
#define CCB_CREATE(object_type) \
static CCNode * create##object_type##Node() { \
std::map<std::string, CCNodeLoader*> loader_map; \
std::string classname = #object_type; \
INSERT_LOADER_MAP(object_type); \
return loadCCBFile((classname + ".ccbi").c_str(), loader_map); \
}
【问题讨论】:
-
我不推荐使用
__type__。这是一个保留的标识符。 -
感谢您指出这一点。刚刚做了一个搜索和替换。