我是C++的新手。这是我第一次使用模板。我想用纯虚函数定义某种接口(interface),但是这些函数的返回类型可能会根据派生类而有所不同。因此,我考虑在抽象类中使用模板。我不确定我所拥有的是否有效。我有类似的东西:
template <class T> class InterfaceClass
{
public:
virtual T function1(const string& value)=0;
virtual T function2(const MyObj& p)=0;
}
这样我就可以继承它并定义一个接口(interface)来访问这些函数。
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
中定义函数成员。我现在真的很困惑,想知道这是否可行或我做错了什么。任何帮助深表感谢。 最佳答案
真正的问题是,当您从具有不同参数的模板类继承到同一模板时,您的类没有公共(public)基类。 (InterfaceClass<int>
和InterfaceClass<double>
是不同的类)。
对于虚拟机,定义它们时只需要提供类名即可。