كيفية تحويل 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). لكني مبتدئ وأشعر بالارتباك.
أرشدوني،