|
Boost Users : |
Subject: [Boost-users] [msm] & typeerasure / any
From: Raj Sambasivan (rajinikanth_at_[hidden])
Date: 2014-09-27 19:48:05
HI Boost-users/christophe,
I'm trying to make use of type erasure for fsm based on suggestion from an
earlier mail thread
http://boost.2283326.n4.nabble.com/msm-access-to-root-fsm-td4649632.html
but hitting compilation errors. Can you pls help?
while the any works as expected for push back e.g for vector (bottom of
email) it doesnt work for MSM..
*Doesn't Work for MSM:*
BOOST_TYPE_ERASURE_MEMBER((has_process_event), process_event, 1)
typedef any<has_process_event<HandledEnum(Event1 const &)>, _self&> any_fsm;
struct AnyFSM
{
AnyFSM(any_fsm afsm_) : _afsm(afsm_) {}
void process(Event1& e) { _afsm.process_event(e); }
any_fsm _afsm;
};
TestFSM test;
test.start();
AnyFSM(test);
test.process(Event1());
*error:*
*test.cpp:47:43: **error: **'Event1' does not refer to a value*
typedef any<has_process_event<HandledEnum(Event1 const &)>, _self&> any_fsm;
*Works for vector:*
BOOST_TYPE_ERASURE_MEMBER((has_push_back), push_back, 1)
typedef any<has_push_back<void(int)>, _self&> any_container;
void append_many(any_container container) {
for(int i = 0; i < 10; ++i)
container.push_back(i);
}
struct AnyContainer
{
AnyContainer(any_container cont_) : _cont(cont_) {}
void append() {append_many(_cont); }
any_container _cont;
};
AnyContainer m(v);
m.append();
for(auto i : v)
{
std::cout << i << std::endl;
}
Thanks
-Raj
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net