А ещё не подскажете, может быть кто-то видел элегантную реализацию, я работаю над реализацией конечного автомата. Автомат принимает 4 вида сообщения (пока): MessageA, MessageB, MessageC, MessageD. Он может быть в 3 хостояниях (пока) State1, State2, State3. Автомат полностью детерминированный, то есть он принимает сообщение, выдаёт сообщение, и (опционально) переходит в новое состояние. Получается матрица из 12 функций, часть этих функций по логике делают одно и то же. Пока что я думаю сделать вот так:
class FSM {
template <typename Message> step(Message&& m) {
if (std::is_same<decltype(m), MessageA) step_a(m);
...
};
step_a - это лямбда, которую я переназначу когда удобно