तो मुझे एक मैक्रो मिला है जो जीसीसी में अच्छी तरह से काम करता है, लेकिन माइक्रोसॉफ्ट के सी ++ कंपाइलर में नहीं। मुझे उम्मीद है कि किसी को कामकाज के बारे में पता हो सकता है, या शायद मुझे समझा सकता है कि यह इस तरह से क्यों व्यवहार करता है।एमएसवीसी ++ वैरैडिक मैक्रो विस्तार
मुझे यकीन है कि यह मैक्रो बिल्कुल "मानक" नहीं है, लेकिन यह वास्तव में मेरी मदद करेगा।
यहाँ मैक्रो का एक कार्यात्मक उदाहरण है:
struct MyStructure
{
void Foo()
{
EXPAND_THESE(Property1, Property2, Property3, Property4)
}
Base * parent;
}
यहां बताया गया है जीसीसी ऊपर का विस्तार:
#define VA_NARGS_IMPL(_1, _2, _3, _4, _5, N, ...) N
#define VA_NARGS(...) VA_NARGS_IMPL(__VA_ARGS__, 5, 4, 3, 2, 1)
#define FULLY_EXPANDED(count, ...) \
MAC## count (__VA_ARGS__)
#define SEMI_EXPANDED(count, ...) FULLY_EXPANDED(count, __VA_ARGS__)
#define EXPAND_THESE(...) SEMI_EXPANDED(VA_NARGS(__VA_ARGS__), __VA_ARGS__)
#define ACTUAL_MACRO(x) parent->GetProperty<x>();
#define MAC1(a) ACTUAL_MACRO(a)
#define MAC2(a,b) MAC1(a) ACTUAL_MACRO(b)
#define MAC3(a,b,c) MAC2(a,b) ACTUAL_MACRO(c)
#define MAC4(a,b,c,d) MAC3(a,b,c) ACTUAL_MACRO(d)
#define MAC5(a,b,c,d,e) MAC4(a,b,c,d) ACTUAL_MACRO(e)
यहाँ कैसे मैं इस मैक्रो का उपयोग कर सकते है
struct MyStructure
{
void Foo()
{
parent->GetProperty<Property1>();
parent->GetProperty<Property2>();
parent->GetProperty<Property3>();
parent->GetProperty<Property4>();
}
Base * parent;
}
लेकिन किसी कारण से माइक्रोसॉफ्ट मेरे सभी __VA_ARGS__ को एक तर्क के रूप में फैलाता है:
struct MyStructure
{
void Foo()
{
parent->GetProperty<Property1, Property2, Property3, Property4>();
}
Base * parent;
}
क्या कोई जानता है कि यह क्यों है? क्या माइक्रोसॉफ्ट को जीसीसी की तरह विस्तारित करने के लिए मैं कुछ चाल खींच सकता हूं? शायद कोष्ठक के कुछ अतिरिक्त जोड़े में टॉस?
इस तरह के मैक्रोज़ वास्तव में मुझे "गोंद" कोड का एक गुच्छा बदलने में मदद कर सकते हैं, लेकिन इस समस्या के कारण, मैं इसे अपने वीएस प्रोजेक्ट में नहीं ले जा सकता। किसी भी तरह की सहायता का स्वागत किया जाएगा!
धन्यवाद।
'सा [बग] (http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement) और मुझे नहीं लगता कि वे जल्द ही इसे ठीक करने की योजना बनाते हैं। –
लिंक्ड डुप्लिकेट: [एमएसवीसी ++ (माइक्रोसॉफ्ट विजुअल स्टूडियो) में "मैक्रो ओवरलोडिंग" के साथ वैरैडिक मैक्रो से जुड़े मुद्दों को कैसे ठीक करें?] (Https://stackoverflow.com/q/48710758/514235) - @ जेसेगूड थक्स को इंगित करने के लिए बग। – iammilind