在现代C ++ 11 / C ++ 14 / C ++ 17和未来的C ++ 20中枚举到字符串
一个例子通常比长期解释更好。
您可以在Coliru上编译并运行此代码段。
(另一个前例子也可用)
#include <map>#include <iostream>struct MyClass{ enum class MyEnum : char { AAA = -8, BBB = '8', CCC = AAA + BBB };};// Replace magic() by some faster compile-time generated code// (you're allowed to replace the return type with std::string// if that's easier for you)const char* magic (MyClass::MyEnum e){ const std::map<MyClass::MyEnum,const char*> MyEnumStrings { { MyClass::MyEnum::AAA, "MyClass::MyEnum::AAA" }, { MyClass::MyEnum::BBB, "MyClass::MyEnum::BBB" }, { MyClass::MyEnum::CCC, "MyClass::MyEnum::CCC" } }; auto it = MyEnumStrings.find(e); return it == MyEnumStrings.end() ? "Out of range" : it->second;}int main(){ std::cout << magic(MyClass::MyEnum::AAA) <<'\n'; std::cout << magic(MyClass::MyEnum::BBB) <<'\n'; std::cout << magic(MyClass::MyEnum::CCC) <<'\n';}
支持enum
从不同于零的数字开始的值
支持负的enum
值
支持零碎的enum
价值观
支持class enum
(C ++ 11)
支持class enum : <type>
任何允许<type>
(C ++ 11)
编译时(不是运行时)转换为字符串,
或至少在运行时快速执行(例如,std::map
这不是一个好主意......)
constexpr
(C ++ 11,在C ++中放松14)
noexcept
(C ++ 11)
片段C ++ 14 / C ++ 17友好
C ++ 最先进的技术
一个可能的想法是使用C ++编译器功能在编译时使用基于variadic template class
和constexpr
函数的元编程技巧生成C ++代码......
相关分类