क्या सी ++ में एक स्ट्रिंग के नाम के रूप में प्राप्त करना संभव है जिसे एक परम के रूप में पारित किया गया था?

Nov 29 2020

मैं ऐसा कुछ करने में सक्षम होना चाहूंगा

int myVar = 3;

void logger(int param) {
  std::cout << nameOf(param) << ": " << param << std::endl;
}

logger(myVar); // prints "myVar: 3"

जवाब

4 cigien Nov 29 2020 at 19:14

नहीं, आप इसे C ++ भाषा में अभी तक नहीं कर सकते, क्योंकि ऐसा करने के लिए कोई प्रतिबिंब सुविधा नहीं है।

हालाँकि, आप इच्छित प्रभाव को प्राप्त करने के लिए प्रीप्रोसेसर मैक्रोज़ का उपयोग कर सकते हैं। ध्यान दें कि मैक्रोज़ खतरनाक हैं, और जहाँ तक संभव हो बचना चाहिए।

सबसे पहले, एक कार्यान्वयन फ़ंक्शन लिखें जो पैरामीटर मान और पैरामीटर नाम को इस तरह लेता है:

void logger_impl(int param, std::string param_name) {
  std::cout << param_name << ": " << param << std::endl;
}

तब आप एक मैक्रो लिख सकते हैं जो कॉल साइट में चर नाम से एक स्ट्रिंग उत्पन्न करता है, #(स्ट्रिंग ऑपरेटर) का उपयोग करके , और फिर कॉल करने के लिए उस स्ट्रिंग को कार्यान्वयन फ़ंक्शन में उपयोग करता है:

#define logger(p) logger_impl(p, #p)

यहाँ एक डेमो है ।