template et héritage avec surcharge
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
| struct base
{
void read(int *pi) { *pi=1; }
};
template<class B>
struct middle: public B
{
int read() { int i; B::read(&i); return i; }
};
template<class OB>
struct top: public OB
{
void read(int *pi) { *pi=3; }
};
int main()
{
top<middle<base> > b;
int i=b.read();//erreur <- tentative d'appel de middle<>::read()
return 0;
} |
Pourquoi ceci ne compile pas ?
"error C2660: 'top<OB>::read' : function does not take 0 arguments"
Pourtant top<> devrait hériter de la fonction middle<>::read() qui est "visible" par héritage public ?
D'ailleurs, il suffit de renommer top<>::read() en top<>::reada() (où un autre nom quelconque) pour que middle<>::read() devienne "visible".
Là, je ne comprend plus pourquoi la surcharge de read() ne fonctionne pas .