Здравствуйте, sergii.p, Вы писали:
SP>Пока второй вариант многословней. Но и надо понимать, что StateMachine однотипный для всех корутин. Заново его писать не придётся. Основная бизнес-логика сосредоточена в runMachine. Тогда как в первом примере логика больше перенесена в StateMachine.
Я бы ещё добавил эквивалентный вариант с использованием std::generator для полноты картины:
http://coliru.stacked-crooked.com/a/a01d31f13490f65c
#include <generator>
#include <iostream>
#include <string>
std::generator<std::string> runMachine() {
co_yield "Idle";
co_yield "Started";
co_yield "Processing";
co_yield "Stopped";
}
int main() {
for (const std::string& state : runMachine())
std::cout << "State: " << state << std::endl;
}
State: Idle
State: Started
State: Processing
State: Stopped
Офигенная машина состояний. Паровоз Черепановых нервно пыхтит в коридоре