Bonjour,

J'ai besoin de template template, chose que je ne fais pas tous les jours, et malheureusement, je n'ai pas au boulot mon bouquin de Josuttis/Vandevoorde.

J'en appelle donc à vous, car pour ce genre de question, il est difficile de trouver des réponses par Google.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<class TA, class TB, class TC, template <class, class, class> class TDerived>
class IInterface
{
   ... 
};
 
template <class TA, class TB, class TC>
class IWrapper : public IInterface<TA, TB, TC, IWrapper <TA, TB, TC> >
{
   ... 
};
 
template <class TA, class TB, class TC>
class Implementation: public IWrapper <TA, TB, TC>
{
   ... 
};

Vous reconnaissez un CRTP.

Visual râle sur la déclaration de la seconde classe, en disant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
syntax error : missing ',' before '<'
see reference to class template instantiation 'route::IWrapper <TA, TB, TC>' being compiled
Dans la déclaration de IWrapper, j'ai modifié comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
template <class TA, class TB, class TC>
class IWrapper : public IInterface<TA, TB, TC, IWrapper>
{
   ... 
};
Mais j'obtiens le même message d'erreur.

Notez que dans une démarche de debug, j'ai commenté le contenu de toutes les classes, en ayant juste en bout de course un cpp vide qui se contente d'inclure le .h contenant la déclaration d'Implementation. Je ne fais aucune instanciation...