Следующий код не компилируется. G CC жалуется на отсутствие функции сопоставления для вызова 'производного :: print (std :: __ cxx11 :: string &).
class base
{
public:
virtual void print(float x){}
virtual void print(std::string str){}
};
template<class ProcessType>
class CProcess : public base
{
public:
CProcess(ProcessType* process): m_Storage(process){}
void print(float x) override{m_Storage->print(x);}
void print(std::string str) override{m_Storage->print(str);}
private:
ProcessType* m_Storage;
};
class derived: public base
{
public:
void print(float x) override{}
//void print(std::string str) override{}
};
base* ptr = new CProcess<derived>(new derived);
ptr->print(1.0f);
Производный класс наследует print(std::string str)
от базы, так почему эта ошибка? Теперь, если я также прокомментирую void print(float x) override{}
в производном, компилятор не жалуется.
Конечная цель - реализовать новое поведение для print(float x)
в производном, но сохраняя поведение print(std::string str)
из базы.
Я сократил производственный код до минимально возможной версии, чтобы воспроизвести проблему, поэтому не рекомендуется использовать интеллектуальные указатели и c, поскольку они находятся в производственном коде.