Здравствуйте, kov_serg, Вы писали:
_>Дело как раз не в этом. То что вы показали это просто генераторы, итераторы. У них точка итерирования явная. Коротины же используются для описания асинхронных операций. Более того способ передачи им управления обычно скрыт.
_>Они могут вызываться внешним циклом планировщика, callback-ами (причем не факт что из основного потока).
Нет, то, что я показал — это как раз пример использования корутин. Использование ключевого слова co_yield не оставляет возможности думать по-другому. А использованный в примерах
std::generator — это просто стандартная обёртка, облегчающая работу с корутинами:
A std::generator generates a sequence of elements by repeatedly resuming the coroutine from which it was returned.
Само по себе использование корутин вовсе не означает обязательного использования асинхронных операций. Не нужно путать тёплое с мягким.
P.S. Возможно, в следующим примере использование корутин будет лучше заметно
http://coliru.stacked-crooked.com/a/f2b1f65cf422bead
#include <generator>
#include <iostream>
std::generator<char> coroutine() {
co_yield 'C';
co_yield 'O';
co_yield 'R';
co_yield 'O';
co_yield 'U';
co_yield 'T';
co_yield 'I';
co_yield 'N';
co_yield 'E';
}
int main()
{
std::cout << std::string(std::from_range, coroutine()) << std::endl; // -> COROUTINE
}
COROUTINE