Наследование от шаблона абстрактного класса

Я новичок в C ++. Это моя первая работа с шаблонами. Я хочу определить какой-то интерфейс с чисто виртуальными функциями, но типы возврата этих функций могут различаться в зависимости от производных классов. Поэтому я подумал об использовании шаблона в абстрактном классе. Я не уверен, что то, что у меня есть, действительно. У меня есть что-то вроде:

template <class T> class InterfaceClass
{
public:
virtual  T function1(const string& value)=0;
virtual  T function2(const MyObj& p)=0;
}

Чтобы я мог наследовать от него и определить интерфейс для доступа к функциям.

class myClass : public InterfaceClass<MyObj>{
public:
MyObj InterfaceClass::function1(const string& value)
{
MyObj a = parse(value);
}
MyObj InterfaceClass::function2(const MyObj& p)
{
return p;
}
}

Цель в том, чтобы я хотел быть готовым сделать что-то вроде:

     InterfaceClass * pClass;
if(isCertainType())
pClass = new myClass();
else
pClass = new myClass2();

Компилятор жалуется, что существует переопределение класса InterfaceClassи что члены-функции не могут быть определены в myClass, Я действительно смущен в данный момент и хотел бы знать, возможно ли это или что я делаю неправильно. Любая помощь высоко ценится.

3

Решение

Реальная проблема заключается в том, что когда вы наследуете от класса шаблона с разными аргументами одного и того же шаблона, ваши классы не имеют общего базового класса. (InterfaceClass<int> а также InterfaceClass<double> являются разные классы).

Что касается виртуалов, вам просто не нужно указывать имя класса при их определении.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]