c++ - 查找对象是否属于C++中的类

标签 c++ oop game-engine

我正在尝试用 C++ 制作我自己的 CBGE(基于组件的游戏引擎),但我被困在这个问题上:如何查找对象是否属于特定类?或者等同于指针,如何查找指针是否指向特定类的对象?让我举个例子:

我的代码中有这个:

//ComponentManager.h
...
std::map<rUUID, std::vector<Component*>> bucket;
...

其中 rUUID 是一个表示 UUID 的类,而 Component 是一个抽象类,它 表示一个实体可以拥有的所有类型的组件。

现在如何为给定的 rUUID 获取特定类型的组件(例如 PositionComponent)?

也有人可以告诉我这种设计是好的还是坏的做法,如果是的话如何 应该成立吗?

最佳答案

如果类Foo有一些虚拟方法,如果你的编译器支持 RTTI你可以检查dynamic_cast<Foo*>(p) != NULL检查是否p指向 Foo 的一些实例(假设 p 被声明为指向 Bar *p; 的某个父类(super class) Bar 的指针 Foo )

通知:dynamic_cast<Foo*>(p) != NULL将返回 true如果p指向 Foo 的某个子类的实例.

另见 <typeinfo> headertypeid (正如另一个答案中的 BlackMamba 所建议的那样)。

关于c++ - 查找对象是否属于C++中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17002037/

相关文章:

c++ - 组合和聚合是一种关联形式吗?

c++ - 使用 getter 设置私有(private)变量

php - 如何在 PHP 中实现复制构造函数?

game-engine - 如何获取平面上的 3D 点(表示为法线并偏离原点)?

c++ - Ogre3D 与 CEGUI

c++ - 找不到 Qt 5.12 D3D 编译器模块

c++ - 如何在 Qt 中等待键盘输入 (c++)

php: __destruct 问题(OOP 新手)

javascript - 使用 Object.create 时如何设置单独的私有(private)变量

c# - FBX 模型无法在 XNA 4.0 中正确显示