gpt4 book ai didi

c++ - Boost::msm 如何使用非默认构造函数初始化 state_machine_def 和 msm::front::state

转载 作者:行者123 更新时间:2023-11-27 23:52:40 25 4
gpt4 key购买 nike

我有一个像这样的状态机:

class FsmDef : public boost::msm::front::state_machine_def<FsmDef> {
private:
Args args;
using State = boost::msm::front::state<>;
public:
FsmDef(Args args) : args{args}
{}


struct InitState {};
struct State1 {
Args1 args1;
State1(Args1 args1) : args1(args1)
{}
};

struct transition_table : boost::mpl::vector<
boost::msm::front::Row<Init, boost::msm::front::none, State1>
> { };

using initial_state = InitState;
};

using Fsm = boost::msm::back::state_machine<FsmDef>;

Fsm fsm;

如何构建fsm 并为FsmDef 初始化私有(private)数据。与 State1 相同。

最佳答案

FsmDef可以是非默认可构造的。但是State1需要默认可构造。

这是一种将参数传递给 FsmDef 的方法.

#include <iostream>
#include <boost/msm/back/state_machine.hpp>

#include <boost/msm/front/state_machine_def.hpp>
#include <boost/msm/front/functor_row.hpp>

struct Args {
int val;
};

class FsmDef : public boost::msm::front::state_machine_def<FsmDef> {
private:
Args args_;
using State = boost::msm::front::state<>;
public:
FsmDef(Args args) : args_{args}
{
std::cout << args_.val << std::endl;
}


struct InitState : boost::msm::front::state<> {};
struct State1 : boost::msm::front::state<> {
// states must be default constructible
// Args1 args1;
// State1(Args1 args1) : args1(args1)
// {}
};

struct transition_table : boost::mpl::vector<
boost::msm::front::Row<InitState, boost::msm::front::none, State1>
> { };

using initial_state = InitState;
};

using Fsm = boost::msm::back::state_machine<FsmDef>;

int main() {
Args a {42};
Fsm fsm(a);
}

运行演示 https://wandbox.org/permlink/ZhhblHFKYWd3ieDK

Fsm , boost::msm::back::state_machine<FsmDef>具有与 FsmDef 具有相同参数的构造函数. AFAIK,它没有明确记录。

这里是定义构造函数的代码。

https://github.com/boostorg/msm/blob/boost-1.64.0/include/boost/msm/back/state_machine.hpp#L1625

关于c++ - Boost::msm 如何使用非默认构造函数初始化 state_machine_def 和 msm::front::state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45188633/

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