Программа возвращаетсяОшибка сегментации (ядро сброшено)«. Что случилось?
Реализация основана на примере —Вложенные‘Форма документации 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;
}
Задача ещё не решена.
Других решений пока нет …