【发布时间】:2020-10-27 21:30:05
【问题描述】:
我不断遇到同样的问题,即使查看教程也无法解决。 我已经“设置”了我的状态机,但我无法在状态之间转换。
这是我的状态机:
class StateMachine
{
State* m_State;
public:
StateMachine();
~StateMachine();
void changeState(State* state);
};
这是一个示例状态:
class A : State
{
public:
A();
~A();
void handleInput(int a);
}
如果我将 a = 1 传递给 A::handleInput(),我想转换到状态 B。但是当我实现它时,我无法从 A::handleInput() 访问 StateMachine,这让我不得不摸索痛苦。
【问题讨论】:
-
这是State Pattern 的常见问题。幸运的是,对于这种情况,前向引用就足够了,当然可以访问
StateMachine类, -
不相关的旁注:如果你真的需要这些析构函数,请确保you don't also need its friends。
-
恕我直言,一个状态机 包含一个或多个状态。因此应该有状态的容器,而不是指针。一个状态可能需要一个 transition 方法,该方法根据给定的输入返回 下一个 状态。
-
@Okami 您可能对我几年前所做的这项工作感兴趣:State machine template class framework for C++ 这有点复杂,但有据可查,希望易于使用。跨度>
-
令人惊讶的是,我在该代码中看到的希腊字符很少......
标签: c++ state-machine