ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

C++/Qt 元类型——枚举 序列化与反序列化

2026/8/23 5:59:28 拓冰建站 浏览量
C++/Qt 元类型——枚举 序列化与反序列化
/*** @brief 枚举转字符串* @tparam T 枚举类型* @param s 枚举类型变量* @return 字符串*/
template <typename T>
inline QString EnumToString(T s)
{// T是枚举类型,编译判断static_assert(std::is_enum<T>::value, "T must be an enum type");QMetaEnum meta = QMetaEnum::fromType<T>();return meta.valueToKey(int(s));
}#ifndef E2S
#define E2S(x) Utils::EnumToString<decltype(x)>(x)
#endif // !E2S/*** @brief 字符串转枚举* @tparam T 枚举类型* @param s 字符串* @return 枚举类型变量*/
template <typename T>
inline T StringToEnum(const QString& s)
{// T是枚举类型,编译判断static_assert(std::is_enum<T>::value, "T must be an enum type");QMetaEnum meta = QMetaEnum::fromType<T>();return T(meta.keyToValue(s.toStdString().c_str()));
}#ifndef S2E
#define S2E(T, x) Utils::StringToEnum<T>(x)
#endif // !S2E