状态机实现c语言多级菜单,用C语言实现分层状态机

我对如何实现我的状态机感到有点困惑.

我已经知道它是分层的,因为一些州共享相同的行动.

我通过这些参数确定我需要做什么:

>类(值为:基数,派生,特定)

> 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可能通过多个派生类和基类共享.

例如࿱

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值