如何通过boost::describe获取枚举类型的原始名称?
如何用Boost.Describe获取枚举类型的原始名称
我已经了解Boost describe库可以描述和检查枚举信息,也知道怎么获取枚举成员,但不清楚能不能获取枚举类型本身的原始名称?
示例代码:
class Outer { // ... enum class MyEnum { FirstItem = 88, SecondItem = 99, }; // ... BOOST_DESCRIBE_NESTED_ENUM(MyEnum, FirstItem, SecondItem) }; // Outer
我希望通过boost::describe获取枚举的原始名称"MyEnum",因为typeid(MyEnum).name()返回的是经过混淆的名称snigglefritzMyEnumSnigglefritz。非嵌套枚举也有同样的需求。
可以通过Boost.Describe获取枚举的原始名称,不管是嵌套还是非嵌套枚举都支持,核心是利用boost::describe::enum_name函数。
嵌套枚举的处理示例
针对你提供的嵌套枚举代码,获取名称的方式如下:
#include <boost/describe.hpp> #include <iostream> namespace bd = boost::describe; class Outer { public: enum class MyEnum { FirstItem = 88, SecondItem = 99, }; BOOST_DESCRIBE_NESTED_ENUM(MyEnum, FirstItem, SecondItem) }; int main() { // 获取嵌套枚举的原始名称 std::cout << bd::enum_name<Outer::MyEnum>() << std::endl; // 输出 "MyEnum" return 0; }
非嵌套枚举的处理示例
对于非嵌套枚举,只需用BOOST_DESCRIBE_ENUM宏声明后,同样可以用enum_name获取名称:
#include <boost/describe.hpp> #include <iostream> namespace bd = boost::describe; enum class NonNestedEnum { Val1, Val2 }; BOOST_DESCRIBE_ENUM(NonNestedEnum, Val1, Val2) int main() { std::cout << bd::enum_name<NonNestedEnum>() << std::endl; // 输出 "NonNestedEnum" return 0; }
说明
boost::describe::enum_name会直接返回你在宏中声明的枚举类型名称,完全不受编译器名称混淆(name mangling)的影响,正好解决typeid(T).name()返回混淆名称的问题。
内容的提问来源于stack exchange,提问作者JimB
相关产品推荐
相关产品推荐

