Приведенный ниже код компилируется с gcc v4.3.3, и шаблонный дочерний класс, кажется, переопределяет виртуальную функцию в родительском, но не нарушает ли это правило, что у вас не может быть функции виртуального шаблона? Или что-то еще происходит, чего я не понимаю?
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;
}
Затем выводится:
Base int 3
База двойная 5,5
Детский ТТ 3
База двойная 5,5
Детский ТТ 3
База двойная 5,5
как я и надеялся, но я не уверен, почему это работает.