我对如何实现我的状态机感到有点困惑.
我已经知道它是分层的,因为一些州共享相同的行动.
我通过这些参数确定我需要做什么:
>类(值为:基数,派生,特定)
> OpCode
>参数1 – 可选
>参数2 – 可选
我的层次结构由Class决定,OpCode表示操作.
Derived可以使用Base的OpCodes和Specific可以使用Base和Derived的OpCodes.
天真的实现如下:
void (*const state_table [MAX_CLASSES][MAX_OPCODES]) (state *) {
{base_state1, base_state2, NULL, NULL},
{base_state1, base_state2, derived_state1, NULL},
{base_state1,base_state2, derived_state1, specific_state3},
};
void dispatch(state *s)
{
if (state_table[s->Class][s->OpCode] != NULL)
state_table[s->Class][s->OpCode](s);
}
这将变得难以维持.
还有另一种方法将状态映射到超类吗?
编辑:
进一步的计算让我觉得我可能会使用大部分(如果不是全部)操作码,但我不会使用所有可用的类.
另一个澄清:
某些OpCode可能通过多个派生类和基类共享.
例如