Вот минимальный пример того, что я означает, что оболочка просто используется для передачи входного параметра фактической функции сопрограммы:
Код: Выделить всё
auto my_coroutine(int input) -> awaitable
{
// some normal coroutine activity... not important what it is
auto result = co_await something();
co_return result * input;
}
auto wrapper() -> awaitable
{
// Option A - wrapper is a normal function (allowed?)
return my_coroutine(77);
// Option B - wrapper is also a coroutine (unnecessary?)
co_return co_await my_coroutine(77);
}
auto caller() -> awaitable
{
auto result = co_await wrapper();
...
}
Для контекста я использую сопрограммы C++20 с Boost ASIO . У меня есть сопрограмма верхнего уровня, управляющая TCP-соединением клиента, которой затем необходимо co_await в отдельной сопрограмме, которая генерирует ответ на каждый клиентский запрос. Отдельная сопрограмма является функцией-членом несвязанного класса, поэтому я использую лямбда-выражение в качестве оболочки для привязки некоторых аргументов и вызова правильного объекта.
Подробнее здесь: https://stackoverflow.com/questions/790 ... l-function