के रूप में तर्क मेरे पास कई चर हैं जिन्हें इंजीनियरिंग विनिर्देश दस्तावेज़ में तत्वों के समान नाम दिया गया है, इसलिए नाम का स्ट्रिंग संस्करण भी उपयोगी है।सी/सी ++ मैक्रो तर्क के लिए विस्तार, स्ट्रिंग
#define MACRO(a) a, #a
विशिष्ट उपयोग है:
void someFunction(int a, const char *name);
someFunction(MACRO(meaningfully_named_variable));
मेरा प्रश्न तिगुना है:
- वहाँ की एक बेहतर तरीका है
मैं अपने आप को इस तरह एक बहुत मैक्रो का उपयोग लगता है यह कर रहा हूं?
- बूस्ट या अन्य पुस्तकालयों में एक समान मैक्रो उपलब्ध है?
- यदि नहीं, तो मैं इसे स्पष्ट और उपयोगी बनाने के लिए इसे कैसे परिष्कृत और पुनर्नामित कर सकता हूं?
संपादित मैंने कहा जाना चाहिए था कि इसके बाद के संस्करण एक न्यूनतम उदाहरण है। फ़ंक्शन में अन्य पैरामीटर हो सकते हैं और नामित इकाई डेटा सदस्य हो सकती है या शायद एक फ़ंक्शन भी हो सकती है।
सी ++ के लिए मैं एक और एक्सटेंशन पर विचार कर रहा हूं वह एक वर्ग NamedRef
है जो मैक्रो की सामग्री प्राप्त कर सकता है।
template <typename T>
struct NamedRef
{
NamedRef(T *t, const char *name) : t(t), name(name) { }
T *t;
const char *name;
};
template <typename T>
NamedRef<T> namedRef(T &t, const char *name)
{
return NamedRef<T>(&t, name);
}
#define WITH_NAME(a) a, #a
// more sophisticated usage example
void otherFunction(double, NamedRef<int>, bool);
otherFunction(0.0, namedRef(object.WITH_NAME(meaningful_member_name)), false);
मै मैक्रो के लिए एक और वर्णनात्मक नाम चुनूंगा, उदाहरण के लिए 'WITH_NAME()'। –
क्या करें @MarkRansom ने सुझाव दिया। मेरा जवाब "यह ठीक है" कहने का एक लंबा तरीका था और बूस्ट के पास 'BOOST_STRINGIZE (X)' नामक एक मैक्रो है। – AusCBloke