You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:05:07