функция c ++ возвращает лямбда не захватывая строку по значению - PullRequest
0 голосов
/ 09 апреля 2020

Я пишу лямбда-конструктор функций, который выглядит примерно так:

std::function<...> Builder(const SomeObj& obj, const std::string& some_string) {
  return [&, some_string]() {
    cout << some_string;
  }
}

SomoeObj obj;
std::string some_string = "some_string";
Builder(obj, some_string)();  // => this will print an empty string instead of "some_string"

Мой вопрос:

  1. почему он не захватывает при копировании и имеет локальная строка "some_string" для самого лямбда-тела?

  2. как заставить это работать?

1 Ответ

0 голосов
/ 09 апреля 2020

Извините, реальный воспроизводимый код возвращает absl :: FunctionRef вместо std :: function. Поэтому он возвращает ссылку на лямбду, которая является локальной для функции Builder.

Переключение типа возврата на std :: function решило странную проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...