如何在 Boost::Statechart 中向状态添加 20 多个过渡
How to add more than 20 transitions to a state in Boost::Statechart?
我不得不承认,我对C++和Boost Statecharts相当陌生。我玩了一下Statechart库,想构建一些"更大"的状态机。
我举一个非常简单的例子来说明我的问题。让我们假设一个只有一个状态和大量自我转换的状态机。如何构建这样的东西?gcc(4.5.2) 编译器拒绝了 20 个转换以上的所有内容("模板参数数量错误(21,应该是 20)")
下面是一些示例代码:
#include <boost/statechart/event.hpp>
#include <boost/statechart/state_machine.hpp>
#include <boost/statechart/simple_state.hpp>
#include <boost/statechart/transition.hpp>
#include <iostream>
#include <boost/mpl/list.hpp>
namespace sc = boost::statechart;
struct MyEvent1: sc::event<MyEvent1> {};
struct MyEvent2: sc::event<MyEvent2> {};
//...
struct MyEvent21: sc::event<MyEvent21> {};
struct MyState;
struct Statemachine: sc::state_machine<Statemachine, MyState> {};
struct MyState: sc::simple_state<MyState, Statemachine> {
typedef boost::mpl::list<
sc::transition< MyEvent1, MyState > ,
sc::transition< MyEvent2, MyState > ,
//...
sc::transition< MyEvent21 >
> reactions;
};
int main() {
//..
return 0;
}
你的问题实际上与Boost.Statechart无关,而是与Boost.MPL有关,你正在使用它的字体表。来自 Boost.MPL 文档:
BOOST_MPL_LIMIT_LIST_SIZE
是一个可覆盖的配置宏,用于调节list
和list_c
的可变参数形式的最大arity。在此库实现中,BOOST_MPL_LIMIT_LIST_SIZE
的默认值为 20。
它继续:
要覆盖默认限制,请在包含任何库标头之前,将
BOOST_MPL_LIMIT_LIST_SIZE
定义为所需的最大 arity,向上舍入到最接近的 10 的倍数。
因此,大概您在任何#include
之前都需要以下内容:
#define BOOST_MPL_LIMIT_LIST_SIZE 30
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 如何避免向类中添加越来越多的状态?
- 添加使用malloc()并具有状态的TensorFlow OP
- 将图标添加到状态栏 - Qt
- 警告:状态已添加到QState
- 如何在 Boost::Statechart 中向状态添加 20 多个过渡
- 添加节点时C++二叉搜索树状态访问冲突错误
- 为c++控制台应用程序添加状态栏
- 在 CListCtrl 中为图像添加状态图标
- 如何向gtkmm状态图标对象添加标签