gpt4 book ai didi

c++ - 如何在 Boost::Statechart 中向一个状态添加超过 20 个转换?

转载 作者:行者123 更新时间:2023-11-30 04:28:00 25 4
gpt4 key购买 nike

我不得不承认,我对 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 docs :

BOOST_MPL_LIMIT_LIST_SIZE is an overridable configuration macro regulating the maximum arity of the list's and list_c's variadic forms. In this implementation of the library, BOOST_MPL_LIMIT_LIST_SIZE has a default value of 20.

它继续:

To override the default limit, define BOOST_MPL_LIMIT_LIST_SIZE to the desired maximum arity rounded up to the nearest multiple of ten before including any library header.

所以大概您需要在任何 #include 之前添加以下内容:

#define BOOST_MPL_LIMIT_LIST_SIZE 30

关于c++ - 如何在 Boost::Statechart 中向一个状态添加超过 20 个转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10489710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com