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

时间:2015-05-17 05:17:42

标签: c++ fsm state-machine

我已经看到了许多实施FSM的不同方法。

切换情况下的 函数指针表 面向对象编程

我的问题是,在选择一种实施方案时,我应该注意哪些主要因素。在我的情况下,我只有4个状态,每个状态最多有2个转换。我的主要目标是让其他人可以轻松阅读实现。

由于

1 个答案:

答案 0 :(得分:0)

请查看method-based 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()));
    }
};