43 votes

Modèle C++ - Plusieurs types

considérez le modèle de classe suivant :

 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 argument de modèle supplémentaire T2 c'est à dire,

 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. J'obtiens l'erreur :

 error C2244: unable to match function definition to an existing declaration

À quoi devraient ressembler la définition et la déclaration de la fonction dans ce cas.

35voto

bobobobo Points 17477

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 Structure déclarés en utilisant seulement 1 paramètre de modèle (c'est ce que je faisais).

2voto

Hafedh Points 21

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";
}

Puis

 int main()
{
    cout << "Hello World!\n"; 
    MyClass<int, int> a;
    int *b = (int*)malloc(sizeof(int));
    *b = 5;
    a.MyFunc2(b);
}

Sortir

 Hello World!
dummy 5

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X