Может ли лямбда-функция asio co_compose захватить этот указатель?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Может ли лямбда-функция asio co_compose захватить этот указатель?

Сообщение Гость »


Я прочитал этот вопрос и ответ.
Объяснение времени жизни лямбды для сопрограмм C++20
Если я правильно понимаю, лямбда-выражение с захватом чего-то небезопасно, если лямбда выражение используется как функция сопрограммы.
Теперь у меня возник следующий вопрос.

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

#include 
#include 
#include 

namespace asio = boost::asio;

struct foo {
template 
auto mf1(
CompletionToken&& token
) {
return asio::async_initiate<
CompletionToken,
void()
>(
asio::experimental::co_composed<
void()
>(
[](                 // capture nothing
auto /*state*/,
foo& self
) -> void {
// co_await some_async_function(asio::deferred);
self.val_++;    // accesses member variables via self
co_return {};
}
),
token,
std::ref(*this)
);
}

template 
auto mf2(
CompletionToken&& token
) {
return asio::async_initiate<
CompletionToken,
void()
>(
asio::experimental::co_composed<
void()
>(
[this](              // capture this.
auto /*state*/
) -> void {
// co_await some_async_function(asio::deferred);
val_++;          // accesses member variables
co_return {};
}
),
token
);
}

int val_ = 0;
};

asio::awaitable proc() {
foo f;
co_await f.mf1(asio::deferred);
co_await f.mf2(asio::deferred);
std::cout 

Источник: [url]https://stackoverflow.com/questions/78127298/can-asio-co-composed-lambda-function-capture-this-pointer[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу рефакторировать старые звонки Asio Asio
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как я могу рефакторировать старые звонки Asio Asio
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как я могу рефакторировать старые звонки Asio Asio
    Anonymous » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Почему, когда функция принимает указатель, мы передаем адрес конкретной переменной, а не указатель?
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как захватить члена класса члена класса в лямбда-выражении
    Anonymous » » в форуме C++
    0 Ответы
    92 Просмотры
    Последнее сообщение Anonymous

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