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

时间:2013-06-08 17:27:27

标签: c++ oop game-engine

我正在尝试用C ++制作自己的CBGE(基于组件的游戏引擎),但我仍然坚持这个问题:如何找到一个对象属于一个特定的类?或者用指针等效,如何找到指针指向特定类的对象?让我举个例子:

我的代码中有这个地方:

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

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

现在我如何获得给定rUUID的特定类型的组件(e.x. PositionComponent)?

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

3 个答案:

答案 0 :(得分:1)

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

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

另请参阅<typeinfo> headerFoo(正如BlackMamba在其他答案中所建议的那样)。

答案 1 :(得分:1)

RTTI效果很好,但我想再展示一次。

如我所见,您的所有实例都属于Component-class。在这种情况下,您可以在Component中创建自己的虚拟方法供自己使用。像这样:

class Component
{
    virtual std::string
    type() const = 0;
};

class someComponent : public Component
{
    virtual std::string
    type() const { return "someComponent"; }
};

通过这种方式,您可以获得额外的优势。例如,为完全不同的类创建相同的类型。或者,执行比返回类型更复杂的操作。并且您的编译器不必具有RTTI。

答案 2 :(得分:1)

也许,你可以使用这个函数:typeid()