Как захватить уникальный_ptr в функции std ::C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как захватить уникальный_ptr в функции std ::

Сообщение Anonymous »

Мне нужно переместить уникальный_Птр в std :: function закрытие. Я использую генерализованные ламбда-захваты в C ++ 14. < /p>

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

auto ptr = make_unique();

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

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

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

 copy constructor of '' is implicitly deleted because field '' has a deleted copy
constructor
std::function func = [p = move(ptr)] { };
Этот пример заставит это работать.
Обратите внимание, что этот ответ просто повторяет пример на isocpp.org. /> Я могу перейти в wared_ptr следующим образом:

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

shared_ptr s = move(ptr);
Но это создает еще одну проблему, потому что мне нужно вызвать функцию, которая ожидает уникального_птра из моей лямбды, и я не могу преобразовать shared_ptr обратно на уникальный_ptr .
Можно ли захватить уникальный_ptr в std :: function ?

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

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

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

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

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

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