将Base *强制转换为正确的派生类

Mer*_*ury 0 c++ inheritance

假定一个std::vector<Base*>和一组类Derived1,...,DerivedN

什么是正确/最佳的架构来决定运行时Derived*我应该dynamic_cast选择哪个类?

例如:我有以下类:CatDogHorse等。他们都有一个基类Animal。我有一个函数可以为每个派生类创建一个实例,并且我想将指针保存在某个地方,例如Bases * ptrs2derivedclesses

有没有更好的方法来保存所有派生类的实例?

Sla*_*ica 8

什么是正确/最佳的架构来决定运行时我应dynamic_cast到哪个Derived *类?

正确/最佳方法是使用(纯)虚拟函数设计基类的正确接口。在某些特殊情况下,有时可以使用动态/静态转换,但通常这表明设计不良。