Spécification de templates imbriquées

Spécification de templates imbriquées - C++ - Programmation

Marsh Posté le 22-08-2005 à 16:03:29    

j'aimerai faire un truc comme ça:
 

Code :
  1. template <size_t a=10> class A1 {};
  2. template <size_t a=10> class A2 {};
  3. template <class G, typename T> class B1{};
  4. template <class G, typename T> class B2{};
  5. template <typename T, class A=A1, class B=B1, class P=B<A,T> > class Z : public P {};


 
et donc pouvoir faire des instanciations stÿle:
Z<int> a;
Z<int,A2> b;
Z<int,A2,B2> c;
 
le prob c'est qu'il me sors ça:
 
error C3203: 'A1' : modèle de classe non valide comme argument de modèle pour le paramètre de modèle 'A', type réel attendu
error C3203: 'B1' : modèle de classe non valide comme argument de modèle pour le paramètre de modèle 'B', type réel attendu
error C2947: '>' attendu pour terminer template-argument-list, '<' trouvé
error C2516: 'P' : classe de base non conforme
error C2143: erreur de syntaxe : absence de ';' avant '>'
error C2143: erreur de syntaxe : absence de ';' avant '>'
 
qu'elle est l'achtuche qu'il me manque ? (y'a t'il quelqu'un dans la salle qui ayes une achtuche assez longue ?)
 
pour l'instant je fais ça pour que ça marche:

Code :
  1. template <typename T, class P = B1<A1<>,T> >class Z : public P {};


 
mais du coup c'est moins zoli à l'instanciation....


Message édité par bjone le 22-08-2005 à 16:40:54
Reply

Marsh Posté le 22-08-2005 à 16:03:29   

Reply

Marsh Posté le 22-08-2005 à 16:30:33    

ta classe B1, notamment, c'est une classe template (avec 2 arguments template), ce qui donne (vite fait) ceci :
 

Code :
  1. #include <cstddef>
  2. template <size_t a=10> class A1 {};
  3. template <size_t a=10> class A2 {};
  4. template <class G, typename T> class B1{};
  5. template <class G, typename T> class B2{};
  6.    
  7. template <typename T, class A=A1<2>,
  8. template <class, class> class B=B1,
  9.   class P = B<A,T> > class Z : public P {};
  10. int main()
  11. {
  12.     Z<int> a;
  13.     Z<int, A2<> > b;
  14.     Z<int, A2<>, B2> c;
  15. }


Message édité par ++fab le 22-08-2005 à 16:36:28
Reply

Marsh Posté le 22-08-2005 à 16:40:22    

haha exact, j'avais pas du tout pensé a cette évidence, honte et flagellation sur moi :cry:
 
bon au moins ce sera toujours utile si quelqu'un retombe sur la même galère. (j'ai donné un nom + parlant pour le topic)


Message édité par bjone le 22-08-2005 à 16:41:18
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed