0

私は次のようなテンプレートクラスを持っています:

template <class TYPE>
class Temp {
public:
    Temp(TYPE _val) : var(_val){};
    TYPE var;
};

このテンプレート クラスのオブジェクトを、STL コンテナーと言うベクターに格納したいと考えています。

void print(vector<Temp<TYPE> *> & _vec) {
    for(unsigned short i = 0; i < _vec.size() ; i++)
       cout << " Value of stored variable is : " << (*_vec[i]).var << endl;
}

int main(int argc, char* argv[]) {
    vector<Temp<TYPE> *> cont;
    Temp<int> t1(20);
    Temp<float> t2(1.4);
    cont.push_back(&t1);
    cont.push_back(&t2);
    return 0;        
}

タイプを定義せずに stl コンテナーを割り当てることができないことはわかっています。これを行う方法はありますか?私はboost.variantを使用できません。

4

1 に答える 1

0

オプションは次のとおりです。

  • Temp(仮想デストラクタを使用して) 共通の基本クラスの個別のインスタンス化を指定し、基本型へのポインタをvector. 次に、 を使用dynamic_cast<>して、格納されたオブジェクトの実行時の型を確認したり、派生したインスタンス化でオーバーライドされた型を示す仮想関数を追加したりできます。

  • 列挙型または int が格納されている現在の型を追跡する独自の判別共用体クラスを記述します (固定セットがある場合)。

于 2013-07-10T08:10:12.890 に答える