c++ - 有没有办法将枚举自动序列化为 int?

标签 c++ serialization enums

有没有办法将枚举自动序列化为 int?每次我定义一个新的枚举并写

std::stringstream stream;
stream << myenum1;
stream >> myenum2;

编译器提示运算符 << 和 >> 没有定义。您知道告诉编译器将枚举视为普通 int 的方法吗?

使问题变得更难的是,序列化实际上是在模板中进行的。像这样:

template <typename T>
void serialize(const T& value)
{
    std::stringstream stream;
    stream << value;
}

所以我不能添加任何 Actor :( 也许我可以以某种方式专门化它?

谢谢。

最佳答案

您可以通过 boost 的 TypeTraits ( is_enum ) 查看类型是否为枚举。

然后你可以将它与 enable_if/disable_if 结合起来:

template <class T>
typename boost::disable_if<boost::is_enum<T> >::type serialize(const T&);

template <class T>
typename boost::enable_if<boost::is_enum<T> >::type serialize(const T&); //use casts here

但是,无法检查给定值对于给定枚举是否有效(除非您为给定枚举类型编写特定重载)。

关于c++ - 有没有办法将枚举自动序列化为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2646094/

相关文章:

c++ - 处理大数据网络文件计算n个最近节点的高效算法

c# - 使用反射将 JSON 字符串反序列化为类

enums - 为什么 Phobos 使用枚举作为常量?

C++ HTTP GET 请求问题?

c# - 在 C++ 中使用 C# 代码的可能方法有哪些

c++ - C++ 中的均值偏移实现

Java 泛型和可序列化

c# - 如何将 byte[] 反序列化为要在方法调用时转换的通用对象

python-2.7 - pip install enum not working 显示 'intflag' 的错误没有

c - 在 C 中指定枚举类型的大小