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);
}
주, 그래서 나는 그 문제라고 생각하지 않습니다. 나는 당신이 다른 전문 분야에서하는 것처럼 template <>
을 공백으로 남기려고했는데 그 결과는 다음과 같은 오류가 발생합니다.
오류 C2912은 : 명시 적 전문성 '무효 DataClass :: WriteData2 (직렬화 :: 개체 *, INT)는' 내 질문은 어떻게하고,
그래서 함수 템플릿의 특수화되지 않습니다 직렬화 :: 객체에서 올바른 uint64
함수를 선택하도록하겠습니까? Serialization :: Object에서 int 버전을 구현할 수는 있지만 모든 가능한 유형에 대한 전문화를 작성하고 싶지는 않습니다. 클래스 외부에서 다음
오류 메시지가 당신이하지 생각보다 완전히 다른 무언가를 나타냅니다. 'Serialization :: Object'와는 아무 관련이 없습니다. – user0042