我使用這個post的宏循環遍歷我的參數。一切都很好!但是,有沒有辦法將這兩個CCB_CREATE
和CCB_CREATE_MORE
結合起來?C++預處理器宏循環__VA_ARGS__ 1 vs 2+參數
我需要提取第一個參數object_type
來編寫其他代碼。額外的object_type
將使用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__'。這是一個保留的標識符。 – chris
謝謝你指出。只是做了一個搜索和替換。 – docchang