Можно ли обернуть сопрограмму C++ в обычную функцию?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли обернуть сопрограмму C++ в обычную функцию?

Сообщение Anonymous »

Правильно ли и/или обертывать сопрограмму обычной функцией так, чтобы нормальную функцию можно было обрабатывать совместно с функцией co_await?
Вот минимальный пример того, что я означает, что оболочка просто используется для передачи входного параметра фактической функции сопрограммы:

Код: Выделить всё

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();
...
}
Правильен ли вариант A, указанный выше, что co_await в вызывающем объекте действителен? Эквивалент этого в моем реальном коде компилируется и, похоже, работает - просто хочу проверить, ничего не упускаю.
Для контекста я использую сопрограммы C++20 с Boost ASIO . У меня есть сопрограмма верхнего уровня, управляющая TCP-соединением клиента, которой затем необходимо co_await в отдельной сопрограмме, которая генерирует ответ на каждый клиентский запрос. Отдельная сопрограмма является функцией-членом несвязанного класса, поэтому я использую лямбда-выражение в качестве оболочки для привязки некоторых аргументов и вызова правильного объекта.

Подробнее здесь: https://stackoverflow.com/questions/790 ... l-function
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»