2011-12-21 11 views
0

shared_ptrをクラスのメンバとして使用したいのですが、shared_ptrが管理する型は毎回異なり、実行時にのみ認識されます。そのようなメンバーを宣言して後でそれを初期化する方法はありますか?generic shared_ptrをクラスのメンバとして

答えて

3

はい。

共通の基本クラス、たとえばBaseを定義し、その中に共通のインタフェースを仮想関数として宣言し、そこから派生し、派生クラスに仮想関数を実装することを意味します。

std::share_ptr<Base> ptr; 
//now ptr can store an instance of any derived class from Base 

それとも、共通の基本クラスを定義することはできません場合は、boost::anyを使用することができます。あなたがそうなら、あなたはこのように使用することができます。 Boostを使用できない場合は、anyクラスを自分で定義することができます。このサイトとgoogleでタイプ消去を検索してください。

次は、型消去に2-ページの記事で、あなたは(完了していないが)second pageboost::anyの実装を見つけることができます:

+0

'std :: shared_ptr 'を意味しますか? –

+0

@KerrekSB:おっと。はい。ありがとう。 – Nawaz

1

タイプがある場合無関係な場合は、Boost.Anyのようなものを使用できます。それ以外の場合は、@Nawaz saysを実行します。

関連する問題