betrachten Sie die folgende Vorlagenklasse.
template <class T>
class MyClass
{
void MyFunc();
}
template <class T>
void MyClass<T>::MyFunc()
{
//...implementation goes here
}
Ich muss eine weitere Funktion MyFunc2 hinzufügen, die ein zusätzliches Template arg T2 Akzeptiert
template <class T>
class MyClass
{
void MyFunc();
template <class T2>
static void MyFunc2(T2* data);
}
template <class T>
void MyClass<T>::MyFunc()
{
//...implementation goes here
}
template <class T, class T2>
void MyClass<T>::MyFunc2(T2* pData)
{
//...implementation goes here
}
Ich verwende den VS 2008 Compiler. Ich bekomme den Fehler
error C2244: unable to match function definition to an existing declaration
Wie sollte die Funktionsdefinition und -deklaration in diesem Fall aussehen?.
template <class T>
template <class T2>
void MyClass<T>::MyFunc2(T2* pData)
{
//...implementation goes here
}
EDIT 2:
$ 14.5.2/1 - "Eine Vorlage kann Innerhalb einer Klasse oder Klassenvorlage Deklariert werden; eine solche Vorlage wird als Mitgliedsvorlage bezeichnet. Eine Mitgliedsvorlage kann Innerhalb oder außerhalb ihrer definiert werden Klasse Definition oder Klassenvorlage Definition. Eine Membervorlage einer Klassenvorlage, die außerhalb von ihrer Klassenvorlagendefinition definiert ist, soll mit der Vorlage- angegeben werden. Parameter der Klasse template gefolgt von den template-Parametern der Member template. "
Was Sie tun, ist gut, probieren Sie es aus:
template <typename S,typename T>
struct Structure
{
S s ;
T t ;
} ;
int main(int argc, const char * argv[])
{
Structure<int,double> ss ;
ss.s = 200 ;
ss.t = 5.4 ;
return 1;
}
Dieser Code funktioniert. Wenn Sie seltsame Fehler erhalten, prüfen Sie, ob Sie forward Structure
mit nur einem Vorlagenparameter weiterleiten (das habe ich getan).
Probier diese :
template <class T, class T2>
class MyClass
{
public:
static void MyFunc2(T2* data);
};
template <class T, class T2>
void MyClass<T, T2>::MyFunc2(T2* pData)
{
cout << "dummy " << *pData<< "\n";
}
Dann
int main()
{
cout << "Hello World!\n";
MyClass<int, int> a;
int *b = (int*)malloc(sizeof(int));
*b = 5;
a.MyFunc2(b);
}
Ausgabe
Hello World!
dummy 5