我想使用模板創建一個不同類型對象的數組。 因此,我有一個非模板類(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