С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
1

Лямбда, список захвата

30.03.2016, 23:15. Показов 4122. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть ли возможность поместить в список захвата лямбды, которая находится в методе, переменную член этого класса?
Точнее как это лучше сделать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <algorithm>
#include <vector>
 
class example {
    std::vector<size_t> i;
    std::string str;
public:
    void fun() {
        //auto &s = str; или можно в списке захвата объявить неявный захват
                                        // по ссылке [&], но тогда хватаем всё
        for_each(i.begin(), i.end(), [str](size_t &x) { x = str.size(); });
    }                               // ошибка, str не переменная член функции
};
Можно ли сделать доступной только str для лямбды? Без определения ссылок на нее.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2016, 23:15
Ответы с готовыми решениями:

Передача указателей через список захвата в лямбда функций
Здравствуйте. Я в С++ новичок пока еще. Хочу изучить cocos2d-x столкнулся с такой аномалией - при...

Лямбда-выражения. Как описать лямбда-процедуру и передать в нее файловую переменную?
Погуглив не смогла найти ответов на свои вопросы. Есть следующая процедура, которая находит...

Помогите пожалуйста определить функцию, которая проверяет список на лямбда-выражения
Помогите пожалуйста определить функцию, которая проверяет список на лямбда-выражения ( это вроде не...

Режим захвата
Подскажите, пожалуйста, доступен ли модуль захвата при работе Таймера1 (атмега328р)? Будет ли...

2
Вездепух
Эксперт CЭксперт С++
12794 / 6671 / 1795
Регистрация: 18.10.2014
Сообщений: 16,890
31.03.2016, 00:17 2
Цитата Сообщение от yrceus Посмотреть сообщение
Можно ли сделать доступной только str для лямбды? Без определения ссылок на нее.
Нет. Индивидуально захватывать разрешается только локальные переменные или this. Захват членов класса по значению или по ссылке - запрещен. Доступ к членам класса возможен только через захват this. Именно захват this происходит, если вы указываете захват [&]. Заметьте - физически вы не "хватаете все", физически вы хватаете только указатель this.

А для ограничения доступа (если вас интересует именно это) вы можете поступить так

C++
1
2
3
    void fun() {
        for_each(i.begin(), i.end(), [&str = str](size_t &x) { x = str.size(); });
    }
т.е. использовать захват с инициализатором (С++14).
2
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
31.03.2016, 00:26  [ТС] 3
Понял, в методе при захвате [&] происходит захват this, запомню. Спасибо.

Добавлено через 4 минуты
Во, а последняя фишка [&str = str] вообще исчерпала вопрос) Огромное)
0
31.03.2016, 00:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2016, 00:26
Помогаю со студенческими работами здесь

Таймер в режиме захвата
Пытаюсь запустить таймер в режиме захвата. Так как железа нету пока пользуюсь протеусом/иаром для...

STM32F051R8T6 - Режим захвата
Ранее была реализована процедуры обработки посылки по &quot;воздуху&quot; от датчика, при помощи базового...

Костюм захвата движения
Здравствуйте, я создаю костюм захвата движения на основе датчиков гироскопов mpu 6050. Я зашел в...

Переопределение захвата событий
Я тут отрыла себе скриптик для сайта - навигационное меню выпадающее. Но! Странная вещь - на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru