仮想関数を持つ基本クラスから継承する派生クラスがあります。オブジェクトをベクトルに追加したいので、オブジェクトを作成するためにスマートポインター(shared_ptr)を使用しています。しかし、特定のタスクを実行するためにオブジェクトを処理するコードが繰り返されることに気付いたので、テンプレートがコードを改善するためのソリューションになると考えました。これはこれまでの私の試みです(正確なコードではなく、簡略化されています):
class Base{
public:
virtual ~Base(){}
virtual void display_message() = 0;
};
class DerivedA : public Base{
DerivedA(){}
};
class DerivedB : public Base{
DerivedB(){}
};
//THE template-
//<hold the smart pointer that points to different derived objects>
template<typename T1>
class HandleInstances{
private:
vector<T1> ObjectVector;
//the iterator
T1 sp_base;
public:
HandleInstance(const T1 & sp){
sp_base = sp; // set smart pointer
}
//somefunctions
//this is what i need to figure out
void AddToVector(){
ObjectVector.push_back(sp_base(new 'The derived class') );
}
};
AddToVector 関数がここでの問題です。オブジェクトの要素を追加するには、この push_back( "the smart pointer"( new "the class" )); を実行する必要があります。テンプレートに (オブジェクトではなく) クラスを受け入れさせ、それを push_back() の関数に実装するにはどうすればよいですか?