переместить захват в lambdas
вопрос:
Как мы реализуем захват перемещения, также известные как ссылки на rValue, в C 11 Lambdas? Например:
std::unique_ptrmyPointer(new int); std::function example = [std::move(myPointer)] { *myPointer = 4; };
, используя пространство имен Std;
auto u = make_unique
go.run ([u = move (u)] mintable {do_something_with (std :: u);});
вспомогательная функция, make_rref, может облегчить захват перемещения. Его реализация следующим образом:
using namespace std; auto u = make_unique#включить(some, parameters); go.run([u = move(u)] { do_something_with(u); });
тестовый пример для make_rref:
using namespace std; auto u = make_uniqueint main () { std :: unique_ptr(some, parameters); go.run([u = move(u)] { do_something_with(u); });
эмулирование обобщенного захвата Lambda в C 11
Другой обходной путь предоставляется функцией Capture ():
using namespace std; auto u = make_unique#Incult(some, parameters); go.run([u = move(u)] { do_something_with(u); });
capture реализован следующим образом:
using namespace std; auto u = make_unique#intict Шаблон(some, parameters); go.run([u = move(u)] { do_something_with(u); });
это решение предотвращает копирование Lambda, если захваченный тип не является копируемым, избегая ошибок времени выполнения.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3