我想使用模板创建一个不同类型对象的数组。 因此,我有一个非模板类(Base),以及一个从Base类派生的模板类。
我想知道的是如何访问派生类的泛型值(T val)?
class Base{
public:
// a function returns T val, it will be implemented in Derived class
// EDIT : virtual function here
};
template<class T>
class Derived: public Base {
public:
T val;
Derived(T x) {
val = x;
}
// implementation.. it returns val
// EDIT : Implementation of virtual function
};
解决方案:的dynamic_cast,需要注意的是基类至少应该有一个虚函数。
Base *p[2];
p[0] = new Derived<int>(24);
p[1] = new Derived<double>(82.56);
int a = dynamic_cast<Derived<int>*>(p[0])->val; // casts p[0] to Derived<int>*
double b = dynamic_cast<Derived<double>*>(p[1])->val; // casts p[1] to Derived<double>*
cout << a << endl;
cout << b << endl;
为什么不能让基类模板化呢? – basav
你不能从基类中获取派生类成员...所以,如果它接受参数,可以将它传递给基类 – basav
我试图创建一个包含不同类型对象的数组。我试图创建一个'模板类'的数组,但我不得不这样指定它的类型: 派生 p [10]。但数组应该容纳任何类型的对象 –
luo