Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,687
#1

Интерфейсная ссылка vs лямбда - C++

09.03.2016, 12:06. Просмотров 291. Ответов 7
Метки нет (Все метки)

Добрый день,

если надо, чтобы класс А вслучаи определённого евента сообщил об этом нужного другому классу Б это можно сделать следующими способами:
- класс А принимает в конструкторе интерфейсную ссылку(указатель) - сохраняет у себя и вызывает в нужное время
- класс А принимает в конструкторе std::function<void()>, что является лямбдой или std::bind - сохраняет у себя и вызывает в нужный момент


Для меня оба варианта одинаковые, но с function надо повозится с указанием сигнатуры и/или их смене.

Какие преймущества/недостатки я упускаю?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2016, 12:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интерфейсная ссылка vs лямбда (C++):

Лямбда функции - C++
Всем добрый вечер! Пытаюсь ознакомиться поближе с лямбда функциями и уже возникли трудности... Просмотрела пару публикаций на эту тему и...

Рекурсивная лямбда - C++
можно ли в лямбде сделать рекурсию? как получить имя безымянной функции? this не пашет...

Лямбда выражения - C++
Здрасьте) вопрос по новому стандарту, в который ввели лямбда-выражения. создаю класс, у которого есть поле data, типа map. map...

лямбда функция - C++
привет всем! не понимаю в чем ошибка...вот код vector&lt;string&gt; tmp_count; list&lt;string&gt; tmp_result = str; for(auto i =...

Лямбда функции - C++
Помогите пожалуйста. Написать программу демонстрирующую лямбда функцию на с++. желательно с комментариями, а то я в этом совсем ничего не...

Передача лямбда в функции - C++
В чем смысл передачи лямбда выражения функции?auto square = (int x) { return x * x; }; std::cout &lt;&lt; square(16) &lt;&lt; std::endl;илиclass Foo ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ct0r
Игогошка!
1773 / 675 / 42
Регистрация: 19.08.2012
Сообщений: 1,287
Завершенные тесты: 1
09.03.2016, 12:52 #2
Интерфейс - большие сложные системы, надежность и читабельность.
Функция - небольшие и часто изменяющиеся системы, гибкость.
1
rikimaru2013
09.03.2016, 12:55  [ТС]
  #3

Не по теме:

ct0r, краткость сестра таланта

0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
09.03.2016, 16:20 #4
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
но с function надо повозится с указанием сигнатуры и/или их смене.
decltype же придумали
1
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,687
09.03.2016, 16:26  [ТС] #5
ct0r, а я бы наоборот сказал - интерфейс более лёгкий и маленький. A function усложняет понимания в разы

Kastaneda, да я же в чистом виде имел - а не через эти огороды хелперов type deduction
0
hoggy
Нарушитель
6589 / 2770 / 476
Регистрация: 15.11.2014
Сообщений: 6,122
Завершенные тесты: 1
09.03.2016, 19:06 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Какие преймущества/недостатки я упускаю?
тырфейсы
+ жесткость, надежность, отладка
- высокая связанность, не удобства изготовления и эксплуатации.

делегаты
+ жесткость, отсутствие связности, удобство эксплуатации
- ненадежность, затрудненная отладка

системы сообщений:
+ гибкость, отсутствие связности, удобство эксплуатации,
возможность выполнять массовую рассылку,
возможность локальных и сетевых взаимодействий
не связанных друг с другом компонентов.

- ненадежность, крайне затрудненная отладка.


я предпочитаю тырфейсы, когда хочу явно обозначить,
какие методы пользователю нужно реализовать,
что бы интегрировать в систему свой компонент.

делегаты для взаимодействия компонентов разных подсистем
в рамках одного процесса.

систему сообщений для осуществления массовых рассылок,
для передачи сообщений в условиях,
когда отправителю наплевать,
получит ли кто нибудь его послание,
и для организации сетевых взаимодействий.
1
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,687
09.03.2016, 20:45  [ТС] #7
hoggy, так делегатов нету в С++.
0
hoggy
Нарушитель
6589 / 2770 / 476
Регистрация: 15.11.2014
Сообщений: 6,122
Завершенные тесты: 1
09.03.2016, 21:25 #8
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
так делегатов нету в С++
std::function ? не, не слышал.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2016, 21:25
Привет! Вот еще темы с ответами:

Лямбда не допускает auto - C++
Всем привет! Имеем код: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;numeric&gt; int...

Лямбда-выражения и замыкание - C++
Здравствуйте, изучаю новый для себя стандарт языка и не совсем могу разобраться с замыканием Прогнал по отладчику - c изменяется...

Лямбда, список захвата - C++
Есть ли возможность поместить в список захвата лямбды, которая находится в методе, переменную член этого класса? Точнее как это лучше...

Max_element с лямбда-функцией - C++
Интереса ради решил попробовать такую конструкцию string s; getline(cin,s); auto ma=max_element(s.begin(),s.end(),(string...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.03.2016, 21:25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru