के साथ कॉन्सैट मैक्रो तर्क मेरे पास एक मैक्रो है, जहां तर्कों में से एक एक enum मान है, जो नामस्थान स्कोप निर्दिष्ट किए बिना दिया जाता है। हालांकि मैक्रो के अंदर कहीं मुझे इसे एक्सेस करने की ज़रूरत है (जाहिर है मुझे वहां नामस्थान को परिभाषित करना होगा), लेकिन मैं टेम्पलेट पैरामीटर के साथ नेमस्पेस नाम को सम्मिलित नहीं कर सकता। निम्नलिखित नमूना कोड को देखते हुए संकलक शिकायत करता है कि pasting :: and Val doesnt give a valid preprocessor token
(हालांकि यह प्राप्त करने के लिए ठीक काम करता है और प्राप्त करने के लिए ठीक है)।नामस्थान
namespace TN
{
enum Info
{
Val = 0
};
}
#define TEST(a) TN::Info get ## a(){return TN::##a;}
TEST(Val)
तो वहाँ एक और तर्क का उपयोग और मूल रूप से निर्दिष्ट करने दो बार (जैसे #define TEST(a,b) TN::Info get ## a(){return b;}
) प्रयोग की जाने वाली मूल्य के बिना इस काम करने के लिए किसी भी तरह से है?
स्पष्ट रूप से मैं जटिल होने का तरीका सोच रहा हूं, धन्यवाद – Grizzly
@ ग्रीज़ली: विडंबना यह है कि विपरीत! मेरा पहला वृत्ति भी संयोजित करने के लिए है, क्योंकि मैक्रोज़ मूल रूप से टेक्स्ट प्रतिस्थापन को ढूंढते हैं और प्रतिस्थापित करते हैं। यह तब होता है जब आप महसूस करते हैं कि वे _are_ इससे अधिक जटिल हैं (उसमें वे _tokens_ पर काम करते हैं और हमारे दिमाग नहीं करते हैं) इस तरह के मुद्दे आते हैं। :) –