有没有办法将枚举自动序列化为 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/