在C ++状态机中实现事件条件

时间:2008-12-02 17:24:26

标签: c++ interface lambda state-machine fsm

我正在使用分层FSM作为嵌入式C ++应用程序接口。我想使用小函数来确定是否可以触发某些状态间事件,以及使用它们来实现数据库中的更改:但是,为每个状态创建一个具有不同事件函数的新类是令人生畏的,以及作为回调设置指针。 (我们在这里谈论300个功能。)

如果C ++支持lambda函数,我会使用它们,但我对项目架构没有太多的重视,所以我不愿意使用需要大量库集成的第三方解决方案(如boost)或包含额外的预处理器步骤。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

实际上,如果您使用Boost / TR1库,则支持Lambda functions。详细信息可在Boost web site上找到。

答案 1 :(得分:0)

C++0x standard即将完成并接受。它应该在明年推出时最终成为C ++ 09。该标准将直接包含Lambda functions语言,并且不再需要类似的升级库。 Visual Studio 2010技术预览版中的C ++编译器已经支持Visual C++ Team Blog的Lambda函数。

或者,您可以为逻辑创建Lua绑定,并使用表来将FSM作为shown in this wiki来处理。这是一个非常灵活的解决方案,可以在不重新编译C ++项目的情况下调整FSM。此外,Lambda函数(以及closures)在Lua下是原生的并且是稳定的。 Lua coroutines也值得研究以简化您的FSM实施。

答案 2 :(得分:0)

你看过Qt的QStateMachine了吗?它可能会提供一些灵感。

相关问题