2017-03-18 58 views
2

在本網站的各種答案之後,我試着定義自己的模板函數來將任何枚舉值寫入QDataStream。模板化的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 

但我無法讓它工作。彙編失敗,以下消息:

敵不過 '運算< <'(操作數的類型是 'QDataStream' 和 'MyEnum_e')流< <值;

爲每個枚舉定義函數我按預期工作。我使用enable_if錯了嗎?

回答

2

您需要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; 
} 
相關問題