template <class MyType>
class DataClass
{
public:
virtual void WriteData(Serialization::Object* obj) override
{
obj->Write(m_myData);
}
private:
MyType* m_myData;
};
Serlialization :: Object weiß, wie bestimmte Arten zu schreiben: uint64, double, String. Seine generische <T>
Implementierung wird nicht mit einer statischen_Ausführung implementiert.C++ Template-Spezialisierung. Wie können Sie einen bestimmten Typ auswählen?
Das Problem ist, wenn MyType ist int
es die generische Implementierung wählt. Ich möchte, dass es die uint64
Version wählt. Ich habe versucht, eine Spezialisierung auf DataClass hinzuzufügen, aber es zieht immer noch die generische Implementierung vor. <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);
}
Bitte beachte, dass ich verschiedene Kombinationen von Zeiger/Nicht-Zeiger Anrufe versucht haben, also denke ich nicht, dass das Problem ist. Ich versuchte, die template <>
leer zu lassen, wie Sie in anderen Spezialisierungen tun, und das führt zu dem folgenden Fehler.
Fehler C2912: explizite Spezialisierung 'Leere Dataclass :: WriteData2 (Serialisierung :: Object *, int)' ist nicht eine Spezialisierung einer Funktion Vorlage
Also, meine Frage ist, wie zu tun Ich bekomme es die richtige uint64
Funktion auf Serialization :: Object zu wählen? Ich könnte nur eine int-Version auf Serialization :: Object implementieren, aber ich möchte keine Spezialisierung für jeden möglichen Typ schreiben.
Die Fehlermeldung zeigt an etwas ganz anderes, als Sie vermuten, dass es funktioniert. Nichts mit 'Serialization :: Object' zu tun. – user0042