我很好奇在当前的 C++ 和 C++11 中都可以使用哪些构造或语言功能来推断对象的类型。一个例子:
class Base {
};
class DerivA
: public Base {
};
class DerivB
: public Base {
};
void foo(Base* obj) {
// Identify if `obj` is a `DerivA` or a `DerivB`
}
这是过于简单化了。看起来最好的解决方案不是有一种方法来识别类型,而是为两个派生类型重载函数并取消基类。
我的真实用例是一个类对对象的确切类型不感兴趣(即只需要 Base
的实现)而另一个类需要确切地知道 的实现是什么code>Base
第一个类正在使用。
这发生在基于组件的游戏实体系统中。基础是一个 EntityState
,它的派生类型是 StandingState
、DeadState
等。类 Entity
就是其中一个只需要一个通用的 EntityState
对象和类 EntityRepresentation
需要确切地知道实体处于什么状态来决定是绘制“站立”动画还是“死亡”动画,或其他。
编辑:当然,如果可能的话,我希望以这样一种方式实现游戏,即使是实体表示也不需要知道实体状态的类型。如果有办法做到这一点,那么我会使用它。 :) 我会研究访问者模式。
最佳答案
您可以为此使用dynamic_cast
:
if(DerivA * derivA = dynamic_cast<DerivA*>(obj)){
// it is a DerivA
}
关于C++:识别对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6442576/