Как захватить уникальный_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)] { };
< /code>

он пытается скопировать, а не перемещать, захват лямбда в функцию std :: function < /code>. Соответствующая ошибка: < /p>

 copy constructor of '' is implicitly deleted because field '' has a deleted copy
constructor
std::function func = [p = move(ptr)] { };
< /code>

Пример здесь, похоже, сработает. < /p>

Обратите внимание, что ответ здесь просто повторяет пример на isocpp.org.shared_ptr s = move(ptr);
< /code>

Но это создает еще одну проблему, потому что мне нужно вызвать функцию, которая ожидает уникального_птра < /code> из моей лямбды, и я не могу преобразовать shared_ptr < /code> вернуться к уникальному_PTR 
.

Можно ли захватить уникальный_ptr в std :: function ?

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

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

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

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

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

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