Как захватить unique_ptr в std::functionC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Как захватить unique_ptr в std::function

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

Мне нужно переместить unique_ptr в замыкание std::function. Я использую обобщенные лямбда-захваты в C++14.

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

auto ptr = make_unique();

// Works.
auto lambda = [p = move(ptr)] { };

// This does not compile.
std::function func = [p = move(ptr)] { };
Он пытается скопировать, а не переместить лямбда-захват в функцию std::function. Соответствующая ошибка:

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

 copy constructor of '' is implicitly deleted because field '' has a deleted copy
constructor
std::function func = [p = move(ptr)] { };
Приведенный здесь пример показывает, что это работает.

Обратите внимание, что ответ здесь просто повторяет пример isocpp.org.

Я могу перейти к Shared_ptr следующим образом:

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

shared_ptr s = move(ptr);
но это создает еще одну проблему, поскольку мне нужно вызвать функцию, которая ожидает unique_ptr из моей лямбды, и я не могу преобразоватьshared_ptr< /code> обратно в unique_ptr.

Можно ли захватить unique_ptr в std::function?< /п>

Подробнее здесь: https://stackoverflow.com/questions/569 ... tdfunction
Ответить

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

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

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

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

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