3

我是 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. 我现在真的很困惑,想知道这是否可能或者我做错了什么。任何帮助都深表感谢。

4

1 回答 1

3

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

至于虚拟,你只是不需要在定义它们时提供类名。

于 2012-09-24T18:53:57.583 回答