Bonjour,
Le sujet complet est :
Un type paramètre d'une classe mère template doit-il matcher les besoins de la classe mère dans des méthodes qui sont redéfinies dans la classe fille ?
Ce n'est peut-être pas plus clair, mais des détails suivent.
J'ai un problème avec le code suivant :
Le problème est que ça ne veut pas compiler :
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #include <iostream> struct S { int a; }; template <class T> class A { public: // on appelle f() de la classe instanciée void g( const T& t ) { f(t); } protected: virtual void f( const T& t ) { std::cout << t << std::endl; } }; class B : public A<S> { protected: virtual void f( const S& t ) { std::cout << t.a << std::endl; } }; int main() { S s; s.a = 24; B b; b.g(s); return 0; }
Si je comprends bien, g++ voudrait que operator<<() soit défini pour S sous prétexte que ça serait utilisé dans A::f(). Sauf que moi, ce que je vois, c'est que A::f() n'est jamais appelée, et que la version B::f() est appelée à la place. Ou alors il y a quelque chose que je n'ai pas vu. Alors qui a les plus mauvais yeux, g++ ou moi ?Envoyé par g++
La version de g++ que j'utilise est la 3.4.4
Merci pour votre aide.
Partager