我正在为嵌入式C++应用程序接口使用分层有限状态机。我想使用小型函数来确定是否可以触发某些状态间事件,并使用它们来影响数据库中的更改:然而,为每个状态制作具有不同事件函数的新类是令人生畏的,设置指向它们的回调指针也是如此。(我们正在谈论这里的300个函数。)
如果C++支持lambda函数,我会使用它们,但我在项目架构上没有太多权重,所以我不愿意使用需要进行大量库集成(例如boost)或包含额外预处理步骤的第三方解决方案。
有什么想法吗?
我正在为嵌入式C++应用程序接口使用分层有限状态机。我想使用小型函数来确定是否可以触发某些状态间事件,并使用它们来影响数据库中的更改:然而,为每个状态制作具有不同事件函数的新类是令人生畏的,设置指向它们的回调指针也是如此。(我们正在谈论这里的300个函数。)
如果C++支持lambda函数,我会使用它们,但我在项目架构上没有太多权重,所以我不愿意使用需要进行大量库集成(例如boost)或包含额外预处理步骤的第三方解决方案。
有什么想法吗?
新的C++0x标准即将结束制定和通过。明年推出时应该是C++09。这个标准将直接在语言中包含Lambda函数,并淘汰类似的boost库的需求。根据Visual C++ Team Blog的说法,Visual Studio 2010技术预览版中的C++编译器已经支持Lambda函数。
或者,您可以为逻辑创建Lua绑定,并使用表来处理FSM,如本维基中所示。 这是非常灵活的解决方案,可以允许调整FSM而无需重新编译C ++项目。同时,Lambda函数(以及闭包)在Lua下是本地和稳定的。Lua协程也值得研究,以简化FSM实现。
你看过Qt的QStateMachine吗?它可能会提供一些灵感。