我是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>是不同的类)。

对于虚拟机,定义它们时只需要提供类名即可。

10-08 00:34