问题

我想为有限状态机定义一个抽象类.

 class State
{
  virtual State transit(const Input &i) = 0;
};
 

我的想法是我想要一个原型函数“过境”,它将输入和传输到下一个状态.不幸的是,编译器不允许这样做.

有没有办法提供这样的抽象类?

我认为是提供状态机的抽象,如何运行状态机的逻辑不需要更改一组问题,例如接收输入并继续进入下一个状态等.但这个抽象不关心状态和输入的定义,也许如下所示.

 template<S, I>
class StateMachine
{
  public:
    void set_initial_state(const S &is)
    {
        current_state = is;
    }
    void take_input(const I &input)
    {
        S next_state = current_state.transit(input);
        current_state = next_state;
    }
  private:
    S current_state;
};
 

使用此模板时,我想为“S”提供更多提示,例如,它必须具有“过境”功能.这就是我想到的抽象类“国家”的想法.

  最佳答案

是的,有。 您的编译器不能让您返回一个状态对象,因为它有incomplete type,因此它不知道如何构建它.您可能希望返回对this的引用,例如运算符.

因为你没有真正指定你的总体设计是什么样的,我无法非常帮助你,但我想一个状态机通常很好在所有状态中有一个StateMachineenum class.类似的东西

 class StateMachine {
   enum class State{
     state1,
     state2,
   };
   virtual void changeState(State to) { /* do Something */}
};
 

  相同标签的其他问题

c++