좋아,이 문제에 대해 많은 답변을 읽었지만 적절한 구문을 모르기 때문에 아마도이 작업을 수행 할 방법을 알 수 없습니다.템플릿이 아닌 클래스에서 T 매개 변수가없는 템플릿
필자는 직렬화와 비 직렬화를 위해 주로 다른 정적 유틸리티 함수를 구현해야하는 템플릿이 아닌 클래스가 있습니다.
class Data_Base : public QObject
{
...
protected:
static QByteArray Serialize(int value);
static int DeserializeInt(QByteArray ser);
static QByteArray Serialize(char *value);
static char *DeserializeCharArr(QByteArray ser);
static QByteArray Serialize(QString value);
static QString DeserializeQString(QByteArray ser);
....
}
지금, 그것은 좋을 것이기 때문에, 템플릿으로 모든 Deserialize*
기능을 선호하는 것 : 내가 현재 가지고하면이 같은 것입니다. 또한 보너스로 Serialize
함수를 템플릿으로 사용하므로 실제로 호출 할 오버로드를 명시 적으로 명시해야합니다. 이 방법을 사용할 수 있습니다 뭔가 : 이제
QByteArray ba = Serialize<int>(5);
...
int theValue = Deserialize<int>(ba);
, 나는 다른 접근을 시도했지만, 모든 기능 때문에 내가 알 수없는 시간에 자동으로가 아니라 하나의 과부하를 템플릿을 구현 단지 예를 보았다 이 작품을 만드는 방법.
물론 이것은 QT가 추가 된 C++입니다. 코멘트에 명시된 바와 같이
당신이 찾고있는 것 같은 용어는 * 전문화 *이며 과부하가 아닙니다. * C++ 템플릿 전문화 *에 대한 검색을 수행하십시오. –
템플릿은 각 유형에 대해 코드가 동일 할 때 유용합니다. 함수가 데이터 구조에 따라 다르면 똑똑한 함수 오버로드가 가장 좋은 솔루션입니다. –
하나의 요소를 변경하면 모든 요소가 변경되므로 함수를 호출하는 방법은 어떻습니까? static QByteArray (extern_serialize (value);} 모두 직렬화 (int 값);} 아마도 extern 함수를 친구로 만드는 것과 결합되었을 것입니다. –
Aziuth