Страницы

Поиск по вопросам

четверг, 6 февраля 2020 г.

for_each и unique_ptr

#cpp #cpp11


Имеется список unique_ptr. Можно ли, используя for_each пройтись по списку. Лямда
в которую передаю элемент списка:

auto researchRespawns = [&](Tank& tank)


Ошибка: 

cannot convert argument 1 from 'std::unique_ptr' to 'Tank &'


Я понимаю в чём дело, надо бы разыменовать элемент, но можно ли это сделать?
    


Ответы

Ответ 1



Передавайте ссылку на умный указатель и используйте её внутри лямбда-выражения: std::for_each(v.cbegin(), v.cend(), [] (const std::unique_ptr& tank) { // using tank... }); Либо если необходимо использовать именно указанное лямбда-выражение, то проще сделать так: for (auto& tank : v) { researchRespawns(*tank); } Можно немного извернуться и сделать даже так: std::for_each(v.begin(), v.end(), [researchRespawns] (std::unique_ptr& tank) { researchRespawns(*tank); });

Комментариев нет:

Отправить комментарий