मैं एक मैक्रो को परिभाषित करना चाहता हूं जो किसी अन्य वर्गनाम (मैक्रो तर्क के रूप में) से वर्गनाम उत्पन्न करता है। कुछ इस तरह

#define GenerateClass(InputType) \
class GeneratedClass_##InputType { \
};

हालांकि, जब इनपुट टाइप में नेमस्पेस होता है, तो जेनरेट किया गया क्लासनाम मान्य नहीं होता है। मैं निम्नलिखित संभावित तरीकों के बारे में सोच सकता हूं: 1. उत्पन्न वर्ग के घटक के रूप में यादृच्छिक संख्या (या विश्व स्तर पर अद्वितीय संख्या) का उपयोग करें। प्रकार का नाम सिर्फ पंजीकरण के लिए है इसलिए वास्तविक नाम अंतिम उपयोगकर्ता के नजरिए से मायने नहीं रखता है। 2. इनपुट टाइप को कैननिकल नाम में बदलें। 3. विहित नाम उत्पन्न करने का अन्य तरीका।

क्या किसी भी तरह से करने का कोई तरीका है?

c++
1
Xiao Wu 22 जुलाई 2018, 05:36
यदि अन्य कोड के लिए प्रकार का नाम मायने नहीं रखता है, तो आपको इसे उत्पन्न करने की आवश्यकता क्यों है?
 – 
Peter
22 जुलाई 2018, 06:16
उत्पन्न वर्ग को पंजीकरण के लिए किसी अन्य मैक्रो को भेजा जाता है, मैक्रो के भीतर जिसे मैं लिखना चाहता हूं। मैंने अभी उस हिस्से को नमूना कोड में नहीं रखा है।
 – 
Xiao Wu
22 जुलाई 2018, 06:46

2 जवाब

बस मैक्रो के अपने उपयोग को संलग्न करें:

namespace foo {
    GenerateClass(bar);
}

बेशक जो जेनरेट क्लास को उसी नेमस्पेस में रखता है। यदि आप ऐसा नहीं चाहते हैं, तो एक नया मैक्रो बनाएं जो नेमस्पेस को एक अलग पैरामीटर के रूप में लेता है।

0
John Zwinck 22 जुलाई 2018, 05:53

यदि नाम मायने नहीं रखता है, तो क्या यह एक पहचानकर्ता के बजाय एक टेम्पलेट विशेषज्ञता हो सकती है?

template <class> class GeneratedClass;

#define GenerateClass(InputType)                \
template <> class GeneratedClass<InputType> {   \
   // ... other code?                           \
};

आप InputType के साथ और क्या करते हैं, इस पर निर्भर करते हुए, आप सीधे एक क्लास टेम्प्लेट का उपयोग करने में सक्षम हो सकते हैं और इसे विशेषज्ञ बनाने या मैक्रो का उपयोग करने की आवश्यकता नहीं है।

0
aschepler 22 जुलाई 2018, 06:20
पंजीकरण के लिए कक्षा को किसी अन्य मैक्रो (मेरे द्वारा लिखित नहीं) में पास किया जाना है। हालांकि वह मैक्रो मैक्रो को स्वीकार नहीं करता है।
 – 
Xiao Wu
22 जुलाई 2018, 06:48
तो एक पुस्तकालय मैक्रो है जिसके लिए पहचानकर्ताओं को तर्क के रूप में आवश्यकता होती है? क्या पहचानकर्ताओं को पूरे कार्यक्रम और/या प्रत्येक अनुवाद इकाई में अद्वितीय होने की आवश्यकता है? शायद आप अधिक जानकारी जोड़ने के लिए अपना प्रश्न संपादित कर सकते हैं।
 – 
aschepler
22 जुलाई 2018, 13:01