私は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
。私は現時点で本当に混乱しており、これが可能かどうか、または私が間違っていることを知りたい. どんな助けでも大歓迎です。