यहां कुछ समाधान मैंने कुछ दिन पहले सीखा था। सरलीकृत संस्करण है कि आपके सवाल में आती है:
#define ENUM_MACRO(name, v1, v2, v3, v4, v5, v6, v7)\
enum name { v1, v2, v3, v4, v5, v6, v7};\
const char *name##Strings[] = { #v1, #v2, #v3, #v4, #v5, #v6, #v7};
ENUM_MACRO(Week, Sun, Mon, Tue, Wed, Thu, Fri, Sat);
लेकिन अगर आप एक समारोह कॉल, इस तरह के साथ एक उन्नत संस्करण हो सकता है,:
#define ENUM_MACRO(name, v1, v2, v3, v4, v5, v6, v7)\
enum name { v1, v2, v3, v4, v5, v6, v7};\
const char *name##Strings[] = { #v1, #v2, #v3, #v4, #v5, #v6, #v7};\
const char *name##ToString(value) { return name##Strings[value]; }
ENUM_MACRO(Week, Sun, Mon, Tue, Wed, Thu, Fri, Sat);
यह बड़ा हो जाएगा होने के लिए:
enum Week { Sun, Mon, Tue, Wed, Thu, Fri, Sat};
const char *WeekStrings[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
const char *WeekToString(value) { return WeekStrings[value]; };
आप ऑफसेट का उपयोग भी कर सकते हैं पहले तत्व के लिए, इस तरह:
#define ENUM_MACRO(name, offset, v1, v2, v3, v4, v5, v6, v7)\
enum name { v1 = offset, v2, v3, v4, v5, v6, v7};\
const char *name##Strings[] = { #v1, #v2, #v3, #v4, #v5, #v6, #v7};\
const char *name##ToString(value) { return name##Strings[value - offset ]; }
ENUM_MACRO(Week, 1, Sun, Mon, Tue, Wed, Thu, Fri, Sat);
मुझे उम्मीद है कि इससे मदद मिलती है।
लें देखभाल, Beco
संदर्भ:
Print the month question, कुश, एक सरल समाधान के लिए डैनी Varod
वास्तव में किस प्रकार की तरह अपने मैक्रो देखो? – Xeo
Boost.Preprocessor पर एक नज़र डालें, यह बदसूरत है (सीपीपी की सीमाओं के कारण) लेकिन यह povides का अर्थ है मैक्रोज़ लिखने के लिए जो अनुक्रमों पर काम करते हैं। – Begemoth
लगता है जैसे 'स्ट्रिंग्स' परिभाषा को आउटपुट करते समय उद्धरण भूल गए हैं। इसके अलावा, क्या आप एक भाषा चुन सकते हैं: सी या सी ++? –