// // Copyright (c) 2016-2020 Kris Jusiak (kris at jusiak dot net) // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // #include "boost/sml/utility/dispatch_table.hpp" #include #include namespace sml = boost::sml; namespace { struct runtime_event { int id = 0; }; struct event1 { static constexpr auto id = 1; event1(const runtime_event &) {} }; struct event2 { static constexpr auto id = 2; }; struct dispatch_table { auto operator()() noexcept { using namespace sml; // clang-format off return make_transition_table( *"idle"_s + event = "s1"_s , "s1"_s + event = X ); // clang-format on } }; } // namespace int main() { sml::sm sm; auto dispatch_event = sml::utility::make_dispatch_table(sm); { runtime_event event{1}; dispatch_event(event, event.id); } { runtime_event event{2}; dispatch_event(event, event.id); } assert(sm.is(sml::X)); }