Boost.SML — Нарушение защиты памяти / Ошибка сегментации

Программа возвращаетсяОшибка сегментации (ядро сброшено)«. Что случилось?

Реализация основана на примере —Вложенные‘Форма документации BOOST.SML:

http://boost-experimental.github.io/sml/examples/index.html#nested

SM используется для вызова методов из сервер. сервер используется для переключения состояний в SM.

#include <boost/sml.hpp>
#include <iostream>
namespace sml = boost::sml;
using namespace std;

template <class = class Dummy>
class Server
{
struct pollEvent{};
struct msgRcdEvent{};

class States
{
public:
States(Server *server): _server(server){}

auto operator()() const noexcept
{
auto msgRcdAction = [this] {
std::cout << "HB server -> msgRcdAction " << std::endl;
_server->recvMsg();
};

auto pollAction = [this] {
std::cout << "HB server -> pollAction " << std::endl;
_server->poll();
};

using namespace sml;

return make_transition_table(
*"idle"_s + event<pollEvent> / pollAction    = "Poll"_s,
"Poll"_s + event<msgRcdEvent> / msgRcdAction = "RcdMsg"_s,
"RcdMsg"_s + event<pollEvent> / pollAction   = "Poll"_s
);
}
private:
Server *_server{nullptr};
};

public:
Server()
{
_states = new States(this);
_sm     = new sml::sm<States>(*_states);
}

void process(){_sm->process_event(pollEvent{});}
void poll(){_sm->process_event(msgRcdEvent{});}
void recvMsg(){_sm->process_event(pollEvent{});}

private:
States *_states{nullptr};
sml::sm<States> *_sm{nullptr};
};

int main()
{
Server<> s{};
s.process();
return 0;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]