继承自模板抽象类

时间:2012-09-24 18:51:42

标签: c++ templates inheritance virtual

我是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中定义函数成员。我现在真的很困惑,想知道这是可能还是我做错了。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

真正的问题是,当您从具有不同参数的模板类继承到同一模板时,您的类没有公共基类。 (InterfaceClass<int>InterfaceClass<double>不同的类。)

对于虚拟,您在定义时不需要提供类名。