在C++中实现有限状态机的最佳方法是什么

What's the best way of implementing a finite state machine in C++

本文关键字:最佳 方法 是什么 有限状态机 C++ 实现      更新时间:2023-10-16

我见过许多实现FSM的不同方法。

切换实例函数指针表面向对象编程

我的问题是,在选择一种实现而不是另一种实现时,我应该注意的主要因素是什么。在我的例子中,我只有4个状态,每个状态最多有2个转变。我的主要目标是使实现易于阅读,便于其他人修改。

谢谢

请看基于方法的FSA实现

// abstract FSA
template<class C, typename T>
struct fsa {
    struct state_t {
        typedef state_t (C::*type)(T);
        inline state_t(type f) : state(f) {}
        type state;
    };
    fsa(state_t init) : state(init) {}
    inline bool next(T val) {
        state = (static_cast<C*>(this)->*state.state)(val);
        return state.state != nullptr;
    }
private:
    state_t state;
};
//concrete FSA implementation
struct myfsa : fsa<myfsa,char> {
    inline myfsa() : fsa<myfsa, char>(&myfsa::start) {}
    state_t start(char) {
        std::cout << "start" << std::endl;
        return &myfsa::state1;
    }
    state_t state1(char) {
        std::cout << "state1" << std::endl;
        return &myfsa::state2;
    }
    state_t state2(char) {
        std::cout << "state2" << std::endl;
        return nullptr;
    }
    char get() { return ' '; /*TODO*/ }
    void run() {
        while(next(get()));
    }
};