Enum names as strings in C++
Printing enum names in C++ is pretty easy if preprocessor concatenation operator is used. In the example, the second macro assumes that enum class is used, so it skips class name before two semicolons. Buffer is needed to reserve space for the result.
#include <iostream> #include <string> #include <cstdio> #include <cstdlib> using std::cout; using std::endl; using std::string; using std::sprintf; #define ENUM_NAME(buffer, token) sprintf(buffer, #token) #define ENUM_CLASS_NAME(buffer, token) ({\ sprintf(buffer, #token); \ string buf(buffer); \ buf.substr(buf.find("::") + 2); \ }) enum MyEnum {ONE = 1, TWO = 2, THREE = 3}; enum class MyEnumClass {UN = 1, DEUX = 2, TROIS = 3}; int main() { char buf1[32]; ENUM_NAME(buf1, TWO); cout << buf1 << "=" << int(TWO) << endl; char buf2[32]; cout << ENUM_CLASS_NAME(buf2, MyEnumClass::DEUX) << "=" << int(MyEnumClass::DEUX) << endl; char buf3[32]; ENUM_NAME(buf3, MyEnumClass::TROIS); cout << buf3 << "=" << int(MyEnumClass::TROIS) << endl; return EXIT_SUCCESS; }