Appeler une méthode template d'un paramètre template
Bonjour,
Les explications sont plus bas, le code qui pose problème est là
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include <iostream>
enum enum_type
{
val_zero = 0,
val_one,
val_two,
val_twenty_four = 24
};
/*------------------------------------------------------------*/
class workaround
{
public:
template<enum_type Val>
unsigned int get() { return Val; }
}; // class workaround
/*------------------------------------------------------------*/
template<class Method>
class A
{
public:
void f()
{
Method m;
std::cout << m.get<val_zero>() << std::endl; /* ligne 27 */
}
}; // class A
int main()
{
A<workaround> a;
a.f();
} |
J'essaie d'appeler, dans la classe A, une méthode de son paramètre template. Cette méthode a aussi un paramètre template. Alors je compile tout ça, et là mon compilateur m'insulte (g++ 4.0.3) :
Citation:
test_virt_temp.cpp: In member function «void A<Method>::f()»:
test_virt_temp.cpp:27: erreur: expected primary-expression before «)» token
test_virt_temp.cpp: In member function «void A<Method>::f() [with Method = workaround]»:
test_virt_temp.cpp:64: instantiated from here
test_virt_temp.cpp:27: erreur: no match for «operator<<» in «std::cout << m.workaround::get»
J'imagine que j'ai un problème de syntaxe, mais je n'arrive pas à mettre la main dessus. Est-ce plus clair pour vous ?
Merci