El código siguiente se compila con gcc v4.3.3 y la clase secundaria con plantilla parece estar anulando una función virtual en el elemento primario, pero eso no rompe la regla de que no puede tener una función de plantilla virtual? ¿O está sucediendo algo más que no entiendo?Plantilla clase infantil que sobrescribe la función virtual de una clase principal
class BaseClass
{
public:
virtual void Func(int var)
{
std::cout<<"Base int "<<var<<std::endl;
}
virtual void Func(double var)
{
std::cout<<"Base double "<<var<<std::endl;
}
};
template <class TT>
class TemplateClass : public BaseClass
{
public:
using BaseClass::Func;
virtual void Func(TT var)
{
std::cout<<"Child TT "<<var<<std::endl;
}
};
int main(int argc, char **argv)
{
BaseClass a;
TemplateClass<int> b;
BaseClass *c = new TemplateClass<int>;
int intVar = 3;
double doubleVar = 5.5;
a.Func(intVar);
a.Func(doubleVar);
b.Func(intVar);
b.Func(doubleVar);
c->Func(intVar);
c->Func(doubleVar);
delete c;
}
Esto da salida entonces:
Base int 3
Base doble 5.5
TT Niño 3
Base doble 5.5
TT Niño 3
Base doble 5.5
como esperaba , pero no estoy seguro de por qué funciona.
Veo mi confusión con clases de plantilla vs funciones de plantilla ahora. Por lo tanto, en el código anterior, TemplateClass está haciendo un Func (int) virtual en la compilación, que luego anula el Func (int) virtual de la clase principal –
user334066
@user: Exactly. –