状态机编程 (三) 层次状态机实现
层次式状态嵌套可以通过从超类继承全部共同的东西,而得到新的行为,可以通过定义和现有状态的不同之处而快速定义新的状态,而不是每次从头开始创建每一个新的状态。
层次式概念图:
需要定义一个函数切换的宏,以进入不同层次的状态机:
typedef void (*SM_FUN) (int, int); #define SUCCESS 0 #define CHANG_SM(fun) ((SM_FUN)fun, SUCCESS) void sm_fun_level1(int state, int event) { switch(state) case level1_state1: switch(event) case level1_state1_event1: return CHANG_SM(sm_fun_level2);//进入其他层次的状态处理函数 case level1_state2: ...... } void sm_fun_level2(int state, int event) { switch(state) case level2_state1: ...... case level2_state2: switch(event) case level2_state2_event2: return CHANG_SM(sm_fun_level1);//进入其他层次的状态处理函数 }