如果我创建一个名为base和派生类的基类,称为derived_1,derived_2等…我使用基类的实例集合,然后当我检索到一个元素并尝试使用它时,我会发现C认为它是类型是基类的,可能是因为我从基础的std :: vector检索它.当我想要使用仅存在于特定派生类的功能时,这是一个问题,我知道这个对象是我将其放入向量时的类型.
所以我把元素放入应该是这样的类型,发现这不行.
(derived_3)obj_to_be_fixed;
并记得这是一个指针的东西.经过一些调整,现在工作了.
*((derived_3*)&obj_to_be_fixed);
这是正确的还是有例如一个abc_cast()函数,它减少了混乱?
编辑:
我不得不将其扩展到另一个问题,全面的解决方案显示在那里. stackoverflow.com … why-the-polymorphic-types-error-and-cleanup-question
解决方法
如果您将对象存储在std :: vector< base>没有办法回到派生类.这是因为派生的部分在将其存储在基类的实例中时已被切片(之后,您的向量包含数据的副本,因此它只会快速复制对象的基本部分),从而使存储的对象成为基类,而不是用作基类的派生类.
如果要在矢量中存储多态对象,使其成为一个std :: vector< base *> (或某种智能笔记本到基地,但不是本身),并使用dynamic_cast< derived_3 *>将其转换为正确的类型(或static_cast,如果其性能敏感,并且您有足够的信心,您正在尝试投射到正确的类型(在这种情况下,如果您的错误会发生可怕的事情,所以请注意)).