我有一个像这样的容器模板类:
template <typename T>
class Container : public IElement
{
...
void createElement();
std::vector<T *> container_;
};
template <typename T>
void SwXmlContainer<T>::createElement()
{
container_.push_back(new T());
}
此示例中IElement
可以是空类。
然后,我有另一个类Element
和其他一些继承它的类:
class Element : public IElement
{
...
std::vector<IElement *> childrens_;
};
class ElementA : public Element
class ElementB : public Element
如您所见,Element
可以将Element
和Container
的对象存储在childrens_
向量中。
我的问题是,当我尝试将IElement *
从childrens_
投回Container
时,就像这样:
Container<Element> * container = static_cast<Container<Element> *>(childrens_[0]);
您可以假设Container
内部始终有Element
(可以是ElementA
,ElementB
等。
现在,我们假设childrens_[0]
有一个Container<ElementA>
,使用已投放的container
变量,我尝试在ElementA
内创建一个新的container
:
container->createElement();
问题是这将实例化Element
对象,而不是ElementA
对象。
所以我不知道如何从中实例化ElementA
。我可以预料到,当我从childrens_
向量转换容器时,我不知道他包含的参数类型(ElementA
或ElementB
),所以我可以&#39; t直接投射到它,因此我认为将其转换为基类会解决它,但它没有。
现在,如果无法做到这一点,我的问题还有其他解决办法吗?
我想要的是让Elements
(ElementA
和ElementB
)和Containers
在一个向量中包含更多Elements
(它可以是如果需要,可以使用2个向量,但是一个向量需要接受具有不同类型Container
)的各种Elements
。