gpt4 book ai didi

C++:识别对象的类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:19 27 4
gpt4 key购买 nike

我很好奇在当前的 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,它的派生类型是 StandingStateDeadState 等。类 Entity 就是其中一个只需要一个通用的 EntityState 对象和类 EntityRepresentation 需要确切地知道实体处于什么状态来决定是绘制“站立”动画还是“死亡”动画,或其他。


编辑:当然,如果可能的话,我希望以这样一种方式实现游戏,即使是实体表示也不需要知道实体状态的类型。如果有办法做到这一点,那么我会使用它。 :) 我会研究访问者模式。

最佳答案

您可以为此使用dynamic_cast:

if(DerivA * derivA = dynamic_cast<DerivA*>(obj)){
// it is a DerivA
}

关于C++:识别对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6442576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com