c++ - 将 Base* 转换为正确的派生类
问题描述
假设一个std::vector<Base*>
, 和一组类Derived1
,..., DerivedN
。
在运行时决定Derived*
我应该dynamic_cast
使用哪些类的正确/最佳架构是什么?
示例:我有以下课程:Cat
, Dog
,Horse
等。他们都有一个 Base 类Animal
。我有一个函数来创建每个派生类的实例,并且我想将指针保存在某处,例如 Bases* ptrs2derivedclesses
。
有没有更好的方法来保存所有派生类实例?
解决方案
什么是正确/最佳架构来决定我应该动态转换到哪个 Derived* 类的运行时?
正确/最好的方法是使用(纯)虚函数设计基类的适当接口。动态/静态转换有时在特殊情况下可用,但一般来说它是糟糕设计的标志。
推荐阅读
- vue.js - 使用 vue.js 中的表单向导验证表单字段
- php - 为什么 OrderBy 在我的查询 Laravel 中不起作用
- java - Spring REST Docs 中的转义管道符号
- swift - CoreData + CloudKit 仅在最小化和重新打开应用程序后同步
- ios - 在模态视图中编辑 TextView 时如何处理(或避免)“无法更改 NSManagedObjectContext 的保留策略...”
- dart - 未来的建设者有什么区别?
- numpy - 映射 3 元素的单元矩阵中的第一个元素
- c++ - 不正确的骨骼旋转,基于编辑模式下的骨骼结构
- javascript - 引导表单未提交
- python - 为什么我的自定义类给出“'int'对象不可调用”