如果我制作一个状态机并想使用这样的界面:
AddState ( state1, state2, Key_UP );
AddEvent ( Key_UP );
AddEventFunction ( Key_UP, &UP_Function);
AddStateFunction ( state1, &State1_In_Function, &State1_Out_Function);
AddStateFunction ( state2, &State2_In_Function, &State2_Out_Function);
State1_In_Function ( void ) { printf ( "In #1 \n" ); }
State1_Out_Function ( void ) { printf ( "Out #1 \n" ); }
State2_In_Function ( void ) { printf ( "In #2 \n" ); }
State2_Out_Function ( void ) { printf ( "Out #2 \n" ); }
UP_Function ( void ) { printf ( "Goin UP \n" ); }
这样,当我处于 state1 并且 FSM 收到 Key_UP 时,程序会打印:
Out #1
Goin UP
In #2
问题是如何在不要求程序员更改数组大小的情况下将状态和过渡信息存储在类中。我在想我可以使用 2D 数组并像往常一样使其成为状态表,并使其更便携,我只需通过使用矢量类型根据需要调整大小来处理事件和状态的添加。向量的问题是没有多少嵌入式设备可以使用内存分配调用。我的第二个选择是使用状态机调用构造函数并将表所需的大小传递给它,但是如果我添加任何新的状态或事件,我也需要更改这些值......
那么我应该如何存储我的状态、事件和函数指针呢?!