Добрый день. Подскажите в решении вопроса:
есть следующая структура классов
class Base
{
virtual void f1()=0;
virtual void f2()=0;
virtual void f3()=0;
};
template <typename T, typename U>
class Derived:public Base
{
};
template <typename T>
class Derived<T, ulong>
{
void f1() override { std::cout<<"f1 partial spec ulong";}
};
template <>
class Derived<SomeType, ulong>
{
void f2() override { std::cout<<"f2 full spec ulong";}
void f3() override { std::cout<<"f3 full spec ulong";}
};
int main()
{
Derived<SomeType, ulong> d;
}
Приводит к ошибке компиляции. Получается, что при полной специализации методы частичной специализации не используется и все виртуальные методы необходимо определять в полной специализации? Если же мне нужно определить общий метод, характерный для частичной специализации, но он еще и виртуальный, то нужно подкладывать какую-то функцию обертку?
Такого механизма, как сделать полную специализацию только метода не существует, как я понимаю (указать только частичную специализацию, а полную специализацию сделать так):
template <>
Derived<SomeType, ulong>::f2()
{
...
}