/**
* @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
C++/Qt 元类型——枚举 序列化与反序列化
最新推荐文章于 2024-06-22 09:37:42 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)