मैं अपने तर्कों के माध्यम से इस post लूपिंग से मैक्रोज का उपयोग कर रहा हूं। सब कुछ अच्छा काम करता है! हालांकि, क्या इन दो CCB_CREATE
और CCB_CREATE_MORE
को गठबंधन करने का कोई तरीका है?सी ++ प्रीप्रोसेसर मैक्रो लूप __VA_ARGS__ 1 बनाम 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