template <class MyType>
class DataClass
{
public:
virtual void WriteData(Serialization::Object* obj) override
{
obj->Write(m_myData);
}
private:
MyType* m_myData;
};
Serlialization :: Object知道如何編寫特定類型:uint64,double,string。其通用<T>
實現保持未實現static_assert。C++模板專業化。你如何選擇特定的類型?
問題是當MyType是int
它選擇通用實現。我希望它選擇uint64
版本。我試圖在DataClass上添加一個專門化,但它仍然更喜歡通用實現。 <class T>
virtual void WriteData(Serialization::Object* obj) override
{
WriteData2(obj, m_myData);
}
template <int>
void WriteData2(Serialization::Object* obj, int* data)
{
uint64 lData = *data;
obj->Write(lData);
}
template <class T>
void WriteData2(Serialization::Object* obj, T* data)
{
obj->Write(*data);
}
請注意,我試過的指針/非指針調用各種組合,所以我不認爲這是問題。我試圖像在其他專業領域那樣留下空白,導致以下錯誤。
錯誤C2912:明確的專業化 '無效 DATACLASS :: WriteData2(連載:對象*,INT)' 不是 一個函數模板的專業化
所以,我的問題是怎麼做的我可以在Serialization :: Object中選擇正確的uint64
函數嗎?我只能在Serialization :: Object上實現一個int版本,但我不想爲每種可能的類型編寫專門化。
該錯誤消息表示完全不同的東西比你懷疑它。與'Serialization :: Object'無關。 – user0042