considérons la classe de modèle suivante.
template <class T>
class MyClass
{
void MyFunc();
}
template <class T>
void MyClass<T>::MyFunc()
{
//...implementation goes here
}
Je dois ajouter une autre fonction MyFunc2 qui accepte un Modèle arg T2 .__ supplémentaire. I.e
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
}
J'utilise le compilateur VS 2008. Je reçois l'erreur
error C2244: unable to match function definition to an existing declaration
À quoi devrait ressembler la définition et la déclaration des fonctions dans ce cas?.
template <class T>
template <class T2>
void MyClass<T>::MyFunc2(T2* pData)
{
//...implementation goes here
}
EDIT 2:
14.5.2/1 - "Un modèle peut être Déclaré dans une classe ou un modèle de classe Un tel modèle est appelé un modèle de membre Un modèle de membre peut être défini à l'intérieur ou à l'extérieur de son class definition ou modèle de classe definition. Un modèle de membre d'un modèle de classe défini en dehors de de sa définition de modèle de classe doit être spécifié avec le template. paramètres de la classe template suivis des template-parameters du membre template. "
Ce que vous faites est bien, essayez ceci:
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;
}
Ce code fonctionne. Si vous obtenez des erreurs étranges, voyez si vous faites suivre Structure
en utilisant un seul paramètre de modèle (c'est ce que je faisais).
Essaye celui-là :
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";
}
Ensuite
int main()
{
cout << "Hello World!\n";
MyClass<int, int> a;
int *b = (int*)malloc(sizeof(int));
*b = 5;
a.MyFunc2(b);
}
Sortie
Hello World!
dummy 5