状态机:使用转换矩阵代替嵌套切换案例C++

tzi*_*ppy 3 c++ state-machine

我的状态机遇到了困难.我使用一个函数,它根据输入参数oldState和两个输入参数返回新状态.

在这个函数中,我有很多嵌套的开关案例.我宁愿使用2x2转换矩阵,但不知道如何使用它.我确实使用状态和输入从状态图中创建了一个转换表.

但是我如何使用2暗淡的exaclty.阵列transition_table[3][4]

jxh*_*jxh 5

你说你现在有这样的事情:

StateType transition (StateType old, InputType one, InputType two) {
    //... nested switch statements
    return new_state;
}
Run Code Online (Sandbox Code Playgroud)

所以,你需要的是一个三维数组:

#define MAX_STATES 12
#define MAX_INPUT_VAL 2
StateType transitionTable[MAX_STATES][MAX_INPUT_VAL][MAX_INPUT_VAL] = {
    { { StateA, StateB },
      { StateC, StateD } },
    { { StateE, StateF },
      { StateG, StateH } },
    { { StateI, StateJ },
      { StateK, StateL } },
    //...
};
Run Code Online (Sandbox Code Playgroud)

然后你会像这样过渡:

new_state = transitionTable[StateIndex(old)][one][two];
Run Code Online (Sandbox Code Playgroud)

所以,假设StateIndex(StateC)返回2,那么:

old = StateC;
new_state = transitionTable[StateIndex(old)][1][0];
assert(new_state == StateK);
Run Code Online (Sandbox Code Playgroud)

会导致new_state持有StateK.