我有2节课
class State : public godot::Node
{
public:
State();
virtual ~State() = default;
virtual void _physics_process(double delta) override;
virtual void enter();
virtual void exit();
virtual void update(double delta);
virtual void _ready() override;
protected:
static void _bind_methods();
Player* player;
private:
};
class WalkingPlayerState : public State {
public:
WalkingPlayerState() {
};
virtual ~WalkingPlayerState() = default;
void update(double delta);
protected:
static void _bind_methods() {};
private:
}
class IdlePlayerState: public State {
public:
IdlePlayerState() {};
virtual ~IdlePlayerState() = default;
void update(double delta);
protected:
static void _bind_methods() {};
private:
}
好的,所以在代码中的某个地方,我想比较 WalkingPlayerState 和 IdlePlayerState。我的意思是检查指针的类型是否为 WalkingPlayerState 或 IdlePlayerState。
想象一下我有一本包含所有状态的字典
State* state = stateNodes[i];
现在我想检查是否
state == WalkingPlayerState or IdlePlayerState
现在我想检查 state 是否等于 WalkingPlayerState 或 IdlePlayerState。在 C++ 中如何做到这一点?我是否需要在每个类中包含一个字符串/枚举成员,或者是否有更好的方法来做到这一点而不添加额外的成员?
对于运行时检查,您可以使用动态强制转换,它尝试从输入类型强制转换为给定的模板类型,并返回模板化类型的指针,或者如果强制转换失败则返回 nullptr...以及一个简单的if 语句会自动将其视为 true/false...
#include <iostream>
#include <type_traits>
class Base
{
public:
virtual ~Base(){};
};
class Derived1 : public Base
{
public:
virtual ~Derived1(){};
};
class Derived2 : public Base
{
public:
virtual ~Derived2(){};
};
int main()
{
// Create derived object
Derived1 object;
// Get base pointer from derived object
Base* object_ptr = &object;
// Check if base object pointer is either of the two derived types
if (dynamic_cast<Derived1*>(object_ptr) || dynamic_cast<Derived2*>(object_ptr))
{
std::cout << "Pointer is one of those!" << std::endl;
}
}