Sto usando i macro da questo post attraverso i miei argomenti. Tutto funziona alla grande! Tuttavia, c'è un modo per combinare questi due CCB_CREATE
e CCB_CREATE_MORE
?C++ Macro loop preprocessore __VA_ARGS__ 1 vs 2+ argomenti
Ho bisogno di estrarre il primo argomento object_type
per scrivere codice aggiuntivo. Gli ulteriori object_type
utilizzeranno il ciclo FOR_EACH
da inserire nella mappa.
Il compilatore si lamenta quando ho solo un argomento quando si utilizza CCB_CREATE_MORE(Type1)
. Per risolvere il problema ho creato un'altra macro per gestire tale CCB_CREATE(Type1)
. Sperando di trovare una soluzione intelligente per combinare questi due in una macro elegante. Qualche idea?
#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); \
}
Non è consigliabile utilizzare '__type__'. È un identificatore riservato. – chris
Grazie per averlo indicato. Ho appena fatto una ricerca e ci ho sostituito. – docchang