从基础非模板类指针

时间:2015-11-27 19:59:39

标签: c++ templates vector casting

我有一个像这样的容器模板类:

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可以将ElementContainer的对象存储在childrens_向量中。

我的问题是,当我尝试将IElement *childrens_投回Container时,就像这样:

Container<Element> * container = static_cast<Container<Element> *>(childrens_[0]);

您可以假设Container内部始终有Element(可以是ElementAElementB等。

现在,我们假设childrens_[0]有一个Container<ElementA>,使用已投放的container变量,我尝试在ElementA内创建一个新的container

container->createElement();

问题是这将实例化Element对象,而不是ElementA对象。

所以我不知道如何从中实例化ElementA。我可以预料到,当我从childrens_向量转换容器时,我不知道他包含的参数类型(ElementAElementB),所以我可以&#39; t直接投射到它,因此我认为将其转换为基类会解决它,但它没有。

现在,如果无法做到这一点,我的问题还有其他解决办法吗?

我想要的是让ElementsElementAElementB)和Containers在一个向量中包含更多Elements(它可以是如果需要,可以使用2个向量,但是一个向量需要接受具有不同类型Container)的各种Elements

0 个答案:

没有答案