我正在设计一个简单的Array
类,它能够保存任何类型的对象,比如可以在一个对象中保存多种类型数据的向量。(这是出于学习目的。)
我有一个名为的空基类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;
}
有什么方法可以让我找出我存储的对象类型吗?
编辑:既然人们声称这是不可能的,那么这个怎么样。是否有某种方法可以在类中实际存储类型信息?(我知道你可以在 ruby 中做到这一点)。如果我能做到这一点,我可以将返回类型存储get_element
在 each 中Object
。