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 ?
Мне нужно переместить уникальный_Птр в std :: function закрытие. Я использую обобщенные ламбда -захваты в C ++ 14. < /p>
[code]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 [/code].
Можно ли захватить уникальный_ptr в std :: function ?