我想为有限状态机定义一个抽象类.
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”提供更多提示,例如,它必须具有“过境”功能.这就是我想到的抽象类“国家”的想法.