Avatar ·

كيفية تحويل enum إلى سلسلة نصية في C++ الحديث (C++17/C++20)

مرحبًا أيها الزملاء! أكتب برنامجًا بلغة C++17 وواجهت مشكلة: أحتاج إلى إخراج قيم التعدادات (enum) بشكل قابل للقراءة، لكن الوسائل القياسية في C++ لا توفر طريقة مباشرة لتحويل enum إلى سلسلة نصية. إليك مثال على الكود الخاص بي: ```cpp enum class Color { Red, Green, Blue, Yellow }; int main() { Color c = Color::Green; // أريد إخراج "Green"، لكني أحصل على رقم فقط std::cout << static_cast(c); // يطبع 1 return 0; } ``` في مهمتي الحقيقية، يحتوي التعداد على حوالي 20 قيمة، وأريد استخدامه لتسجيل الأحداث وواجهة المستخدم. حاليًا كتبت switch-case ضخمًا، لكن هذا فظيع — مع كل إضافة قيمة جديدة يجب تعديل الكود في 5 أماكن. أعلم أنه لا توجد انعكاسات (reflection) في C++ كما في Java أو C#، ولكن ربما هناك طريقة حديثة للقيام بذلك بشكل أنيق؟ سمعت عن الماكرو (macros)، وBoost.Preprocessor، وسحر القوالب (templates)، وحتى عن C++20 مع مفاهيمه (concepts). لكني مبتدئ وأشعر بالارتباك. أرشدوني،