在该站点上的各种答案之后,我尝试定义自己的模板函数以将任何枚举值写入QDataStream。

template <typename T, typename std::enable_if_t<std::is_enum<T>::value>>
QDataStream &operator<<(QDataStream& stream, T enumValue)
{
    stream << static_cast<std::underlying_type_t<T>>(enumValue);
    return stream;
}

enum class MyEnum_e : int16_t{};

QDataStream stream;
MyEnum_e value;
stream << value; // Doesn't work

但是我无法使其工作。编译失败,并显示以下消息:



为我拥有的每个枚举定义函数都可以正常工作。我使用enable_if错误吗?

最佳答案

您需要enable_if_t作为模板参数的默认值。

template <typename T, typename U=std::enable_if_t<std::is_enum<T>::value>>
QDataStream &operator<<(QDataStream& stream, T enumValue)
{
    stream << static_cast<std::underlying_type_t<T>>(enumValue);
    return stream;
}

关于c++ - 模板化QDataStream运算符<<用于枚举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42868924/

10-09 13:10