3

テンプレート化されたクラスがあるとしましょう

template<class T>
class A;

template<>
class A<int>
{
    public:
         void print(){ std::cout << "I am an int !" << std::endl; }
};

template<>
class A<double>
{
    public:
         void print(){ std::cout << "I am a double !" << std::endl; }
};

ここで、Aのすべての可能なインスタンスを同じコンテナーに格納する場合は、ベクトルと言います。

次に、古典的な(そして私が知っている唯一の方法)は、純粋な仮想print()メンバー関数を使用して別のクラスA_baseを作成し、Aのインスタンスに初期化されたA_baseへのポインターを格納することです。安全ではないため、この問題を解決する合理的な方法は、boost::shared_ptrまたはstd::tr1 :: shared_ptrを使用することです。これは、std::auto_ptrをコピーすると所有権の問題や未定義の動作が発生する可能性があるためです。

BoostやC++0xの依存関係を含めずに型消去を行う方法はありますか?:)

ありがとう !

4

2 に答える 2

3

ptr_vectorこの質問に対する唯一の答えは、「Boost に既に存在する独自のクラスをロールバックする」ことshared_ptrですany。お気に入りを選んで独自の実装を作成し、それを使用してください。

編集:コメンターがTR1に言及しました。良い叫び。TR1がshared_ptr入っています。

于 2011-07-09T22:18:50.907 に答える
1

boost/any.hppを見てください。やった。

于 2011-07-09T22:14:23.253 に答える