我正在設計一個簡單的Array
類,可以容納任何類型的對象,就像一個可以在一個對象中容納多種類型數據的向量。 (這是一個學習的目的。)如何在運行時使用C++獲取給定元素的模板類型?
我有一個名爲Container
空基類:
class Container {};
和被叫Object
模板化的子類:
template <class T>
class Object : public Container {
T& object;
public:
Object(T& obj = nullptr) : object(obj) {}
};
我有一個Array
類持有vector
指針Container
s我用來保存Object
s:
class Array {
std::vector<Container *> vec;
public:
template <class T>
void add_element(const T&);
auto get_element(int);
};
個
add_element
存儲元件到Object
S和將其放入vec
:
template <class T>
void Array::add_element(const T& element)
{
vec.push_back(new Object<T>(element));
}
get_element
移除元件從它的Object
並將其傳遞迴給調用者。這是我的問題所在。爲了從Object
刪除元素,我需要知道它是什麼類型的Object
:
auto Array::get_element(int i)
{
return (Object</* ??? */> *)vec[i])->object;
}
是否有某種方式爲我找出我存儲什麼樣的目標?
編輯:因爲人們聲稱這是不可能的,這個怎麼樣。是否有某種方式實際存儲類內部的類信息? (我知道你可以用紅寶石來做到這一點)。如果我能這樣做,我可以在每個Object
中存儲返回類型get_element
。
@ildjarn:由於OP中的問題使用'auto',我認爲它是安全的假設。 – 2012-07-06 22:19:20
@ user315052,因爲使用這種方式會更困難。 @ildjarn是的,但是如果我'decltype(vec [i])'我只會得到一個'Container *'。我需要知道它是什麼子類。 – anthropomorphic 2012-07-06 22:19:36
@Jesse:啊,好點。 :-P – ildjarn 2012-07-06 22:21:42