我正在设计一个简单的Array
类能够保存任何类型的对象,就像一个向量可以在一个对象中保存多种类型的数据。 (这是为了学习目的。)
我有一个名为的空基类Container
:
class Container {};
还有一个名为的模板化子类Object
:
template <class T>
class Object : public Container {
T& object;
public:
Object(T& obj = nullptr) : object(obj) {}
};
我有一个Array
持有一个类vector
的指针Container
我用来握住的东西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
it is:
auto Array::get_element(int i)
{
return (Object</* ??? */> *)vec[i])->object;
}
有什么方法可以让我知道我正在存储什么类型的对象吗?
Edit:既然人们声称这是不可能的,那怎么样呢?有没有某种方法可以在类中实际存储类型信息? (我知道你可以在红宝石中做到这一点)。如果我能做到这一点,我可以存储返回类型get_element
每一个Object
.