У меня есть интерфейс и я пытаюсь сделать мой templated класс реализовать этот интерфейс. Простой пример, чтобы продемонстрировать проблемы является:C++: использование шаблона класса для реализации абстрактного класса
class Base{
virtual void do_something(int a) = 0;
virtual ~Base();
};
template<typename T>
class Concrete : Base{
T _t;
Concrete(T t):_t(t){};
virtual void do_something(int a);
};
template<typename T>
virtual void Concrete<T>::do_something(int a){
std::cout << a << std::endl;
}
int main(int argc, char **argv) {
Concrete<int> c;
c.do_something(5);
}
Однако компилятор жалуется:
error: templates may not be 'virtual'
virtual void Concrete<T>::do_something(int a){
Есть ли способ, чтобы добиться такого поведения?
Удалить ключевое слово из определения функции. Это достаточно, чтобы иметь его в объявлении внутри класса. –