Здравствуйте, Videoman, Вы писали:
V>Твой WaitingBlock сейчас везде называется Promise. Это не проблема и есть уже давно. Смотри пара std::promise/std::future. Проблема же не в отложенном ожидании как таковом, а в восстановлении всего контекста ожидания, что бы продолжить бизнес логику дальше, с того же места, где она прервалась на ожидание.
V>Вот пример:V>result class::some_method1(params1_t... params)
V>{
V> Что создаем на стеке (1)
...
V> Очищаем созданное на стеке (6)
V>}
V>
Нужно иметь возможность выполнять эти два метода параллельно, в зависимости от того, как завершаются операции ввода-вывода. В С++20 корутины между вызовами сохраняют объекты выделенные на стеке в куче и после ожидания заново копируют на стек в том же состоянии, для продолжения выполнения с прерванной точки. Как такое можно сделать на С++17 по твоему?
Всё гараздо проще. Нужно иметь возможность использовать разные стеки. В c++ таких механизмов не заложено. В виде костыля это сделано есть в корутинах.
В C++ такое сделать можно только не красиво и через ... вобщем как обычно принято. Если хочется красиво erlang или накрайняк java green threads