是否可以在没有宏的情况下在C++ 11中对枚举值进行字符串化?

Tam*_*lei 8 c++ c++11

我知道可以编写一个"寄存器"宏来将它们的值映射到它们的字符串表示.然而,C++ 11中是否有一些新的魔力使得没有宏和任何注册样板可以做到?

为了说清楚,我希望能够打印枚举变量的标识符,例如:

enum Days { Sunday, Monday, Tuesday };
auto d = Days::Sunday;
std::cout << magic << d;
Run Code Online (Sandbox Code Playgroud)

应输出

Days::Sunday
Run Code Online (Sandbox Code Playgroud)

Bas*_*tch 8

不,这不可能.您需要宏(最好)或扩展编译器以获得额外的技巧(您可以使用插件扩展GCC或使用MELT来提供特殊_my_enum_name_builtin功能,但我认为这不是一个好主意).您还可以(假设可执行文件是使用保留的调试信息构建的)从调试信息中提取名称.

如果你真的需要它,一个更简单的方法就是生成一些(C++)代码,这几乎就是宏为你做的事情.在Qt的莫克可能是你的灵感.

  • 您还可以使用Clang库来解析C++.它被维护并且应该非常容易使用. (2认同)