我是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
中定义函数成员。我现在真的很困惑,想知道这是可能还是我做错了。非常感谢任何帮助。
答案 0 :(得分:3)
真正的问题是,当您从具有不同参数的模板类继承到同一模板时,您的类没有公共基类。 (InterfaceClass<int>
和InterfaceClass<double>
是不同的类。)
对于虚拟,您在定义时不需要提供类名。