我有一个在这里定义的枚举类
// namespace Types
enum class MessageType : uint32_t
{
COMPUTE_SUM_MESSAGE = 1
};
我想要一个可以接受枚举值并将其转换为字节数组的函数。我试图使用underlying_type
将我的枚举值从MessageType
转换为uint32_t
,但我得到了一个不存在合适的构造函数来转换它。
void ConvertMessageTypeToByteArray(Types::MessageType message_type)
{
using MessageTypeUnderlying = std::underlying_type<Types::MessageType>;
// Can not static cast the message_type to MessageTypeUnderlying
MessageTypeUnderlying data = static_cast<MessageTypeUnderlying>(message_type);
}
我想把message_type
作为一个无符号的32位整数,这是它的底层类型。
1条答案
按热度按时间h5qlskok1#
您的
using
语句是错误的。它将MessageTypeUnderlying
定义为std::underlying_type
结构体本身的别名,而不是它所代表的枚举的实际基础类型。因此,当您尝试将枚举值转换为结构体类型时,您会得到错误。编译器的完整错误消息应该向您指出这一点。要解决这个问题,您需要将
MessageTypeUnderlying
定义为std::underlying_type::type
字段指定的类型的别名:成员类型
type
T
的基础类型或者,在C++14及更高版本中,您可以使用helper别名
std::underlying_type_t
:帮助器类型
x一个一个一个一个x一个一个二个x
也就是说,C++23增加了
std::to_underlying()
,它完全可以完成您手动尝试的操作:将枚举转换为其基础类型。等效于
return static_cast<std::underlying_type_t<Enum>>(e);
。