テンプレート化されたクラスがあるとしましょう
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の依存関係を含めずに型消去を行う方法はありますか?:)
ありがとう !