我将分层 FSM 用于嵌入式 C++ 应用程序接口。我想使用小函数来确定是否可以触发某些状态间事件,以及使用它们来影响数据库中的更改:但是,为每个状态创建一个具有不同事件函数的新类也令人生畏将指向它们的指针设置为回调。(我们在这里谈论 300 个函数。)
如果 C++ 支持 lambda 函数,我会使用它们,但我对项目架构没有太大的权重,所以我不愿意使用需要大量库集成(如 boost)或包含的第三方解决方案额外的预处理器步骤。
有任何想法吗?
我将分层 FSM 用于嵌入式 C++ 应用程序接口。我想使用小函数来确定是否可以触发某些状态间事件,以及使用它们来影响数据库中的更改:但是,为每个状态创建一个具有不同事件函数的新类也令人生畏将指向它们的指针设置为回调。(我们在这里谈论 300 个函数。)
如果 C++ 支持 lambda 函数,我会使用它们,但我对项目架构没有太大的权重,所以我不愿意使用需要大量库集成(如 boost)或包含的第三方解决方案额外的预处理器步骤。
有任何想法吗?
你看过 Qt 的QStateMachine吗?它可能会提供一些灵感。
新的C++0x 标准即将完成并被接受。明年推出时,它最终应该是 C++09。该标准将直接在语言中包含Lambda 函数,并且不再需要类似的 boost 库。Visual Studio 2010 技术预览版中的 C++ 编译器已经支持Visual C++ 团队博客中的 Lambda 函数。
或者,您可以为您的逻辑创建Lua绑定并使用表来处理 FSM,如本 wiki 所示。这是一个非常灵活的解决方案,允许在不重新编译 C++ 项目的情况下调整 FSM。此外,Lambda 函数(以及闭包)在 Lua 下是原生且稳定的。Lua 协程也值得研究以简化您的 FSM 实现。