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 に答える