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