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<>检查存储对象的运行时类型,或者您可以添加一些类型指示虚函数,在派生实例中重写。

  • 编写您自己的可区分联合类,其中 enum 或 int 跟踪存储的当前类型(如果有固定集)。

于 2013-07-10T08:10:12.890 回答