Bonjour,

Je fais un template qui prend deux parametres, et dans une des méthodes je voudrais passer le premier paramètre a une méthode statique template du deuxieme paramètre. ca donne cela :

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
 
template <typename A, typename B>
class Foo
{
public:
  int methode(const B& ref)
  {
       A *p = B::getMachin<A>(ref);
 
       if (!p)
          return -1;
 
	return p->getInt();
  }
};
Le problème se situe a niveau de la ligne A *p = B::getMachin<A>(ref)
Le compilo (vc2005) me sort :

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
 
Foo.hpp(35) : error C2275: 'A' : illegal use of this type as an expression
1>        TypeA.h(63) : see declaration of 'TypeA'
1>        Template.hpp(34) : while compiling class template member function 'int Foo<A,B>::methode(const B &)'
1>        with
1>        [
1>            A=TypeA,
1>            B=TypeB
1>        ]
1>        TypeA.h(63) : see reference to class template instantiation 'Foo<A,B>' being compiled
1>        with
1>        [
1>            A=TypeA,
1>            B=TypeB
1>        ]
Je ne comprend pas pourquoi il n'aime pas, la methode statique getMachin renvoie bien évidement un pointeur sur le type qu'on lui passe en paramètre template.

edit : Je precise que la class A (TypeA) hérite de Foo.

Quelqu'un voit comment résoudre l'erreur ?