2015-11-23 3 views
2

у меня есть шаблон, абстрактный класс:Наследования абстрактного шаблон класса в C++ при задании типа

template <class T> 
class MyClass { 
public: 
    virtual bool foo(const T a, const T b) = 0; 
} 

И еще один класс, который хочет, чтобы наследовать, в то время как избавиться от шаблона:

class MyInheritor : public MyClass<int *> { 
public: 
    bool foo(const int* a, const int* b) { /* stuff */ } 
} 

Вышеупомянутое не позволяет мне создавать экземпляр MyInheritor, говоря, что это абстрактный класс. Как я могу переопределить чистый виртуальный метод?

+0

я испортил мое копирование, публика имела внутри класса. Мой плохой, отредактированный –

ответ

4

Поскольку вы здесь ничего не перекрываете: const применяется к int, а не к указателю на int.

Вот исправленная версия вы, вероятно, хотите:

class MyInheritorFixed : public MyClass<int *> { 
    bool foo(int* const a, int* const b) override { return true; } 
}; 

Live

+0

Спасибо. Мне нужно разобраться, почему это решение, еще не совсем ясное для меня. –

+1

@ Chum-Chum Scarecrows 'T' is' int * 'или« указатель на 'int'». Указатель '' const' для 'int *' "записывается как' int * const'. 'const int *' с другой стороны - это другой тип: «указатель на' const int' ». Обычно 'const' может использоваться до или после типа, например. 'const T' или' T const'. Однако, когда указатели задействованы, синтаксис становится более важным, поскольку 'const T *' и 'T * const' имеют разные значения. –

Смежные вопросы