std::function | Полиморфная обёртка функции | Изучение С++ для начинающих. Урок

  Рет қаралды 64,432

#SimpleCode

#SimpleCode

Күн бұрын

Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)
✅Указатель на функцию в качестве параметра. Передача функции в качестве параметра. С++ Урок #65
bit.ly/2s1qndK
✅Цикл foreach C++ | range-based циклы | Изучение С++ для начинающих. Урок #137
bit.ly/2IGexQu
✅Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут!=)
✅ www.donationale...
✅ Telegram канал t.me/SergeySim...
Уроки по программированию
✅Наша группа ВК smplcode
✅Подписывайтесь на канал / @simplecodeit

Пікірлер: 117
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
*Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*
@dirakon8819
@dirakon8819 6 жыл бұрын
Масив функций! Ура, мечта сбылась!
@Funkbass1986
@Funkbass1986 Жыл бұрын
Да, вещь прикольная, спору нет, но как оно будет компилироваться на avr8 например? Я раньше массив указателей на функции ручками, ручками писал. 😅
@DadundddaD
@DadundddaD Жыл бұрын
А если union или variant использовать, то массив функций с разными типами и сигнатурами можно будет использовать.
@go5190
@go5190 6 жыл бұрын
Спасибо! Уроки по С++ на ютубе одни из лучших!
@SeriousSam0009
@SeriousSam0009 Ай бұрын
Это требует много практики. Продолжаю удивляться возможностям плюсов
@pastuhovnikita
@pastuhovnikita Жыл бұрын
Артём, спасибо тебе большое! Как коллега по языку - ты один из нас, профессионалов. Везде даю ссылку на твои занятия как эталон. Ты - лучший!
@tsohee9145
@tsohee9145 5 жыл бұрын
Отличные уроки на логику!!! И не важно программист вы или нет, или даже и не собираетесь быть программистом. Автору огромное спасибо и пожалуйста продолжайте!
@flexterion
@flexterion Жыл бұрын
Лучшие уроки по C++
@pavelnovikov3894
@pavelnovikov3894 3 жыл бұрын
ЭТО САМОЕ ИМБОВОЕ ЧТО Я ВИДЕЛ В СВОЕЙ ЖИЗНИ, СПАСИБО СЕРГЕЙ!!!
@segars9604
@segars9604 6 ай бұрын
Спасибо за бесценный труд!
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
#stdfunction #SimpleCode #урокипрограммирования
@andrewbistroff7558
@andrewbistroff7558 6 жыл бұрын
Сергей очередной раз спасибо за ваши шикарные труды, вы топ!
@maxpo801
@maxpo801 3 жыл бұрын
Вы замечательный! Потрясающее изложение материала!
@НикитаСеребряков-е1в
@НикитаСеребряков-е1в 2 жыл бұрын
Спасибо за урок!
@artlinestudio6735
@artlinestudio6735 3 жыл бұрын
Один из важнейших уроков. Спасибо Сергей! Просим продолжения по С++.
@Ermine882
@Ermine882 6 жыл бұрын
Спасибо за урок, как всегда!
@andreyzavalishchev4818
@andreyzavalishchev4818 6 жыл бұрын
Интересный урок, спасибо Сергей!
@radium6230
@radium6230 6 жыл бұрын
Огромное спасибо. Очень жду подробно про лямбды
@eduardeduard933
@eduardeduard933 4 жыл бұрын
Великолепно, массив функций!
@KurpatovInstagram
@KurpatovInstagram 6 жыл бұрын
Большое спасибо!
@vladalu9794
@vladalu9794 6 жыл бұрын
Супер интересно, как всегда! спасибо
@Toorall
@Toorall 6 жыл бұрын
Спасибо за интересный урок!)
@kartostroy
@kartostroy 5 жыл бұрын
Очень полезный инструмент этот function. Спасибо огромное. C++ - это дебри, но это классно)
@cataract813
@cataract813 6 жыл бұрын
блестящее объяснение! спасибо за вашу работу
@Евгений-ф9я3о
@Евгений-ф9я3о 6 жыл бұрын
хорошее объяснение. спасибо
@proKaps
@proKaps 6 жыл бұрын
Очень годно и так понятно опять! Я даже и не думал пока, что такие вещи изучать а теперь знаю! Спасибо! Жду следующего урока.
@ide9827
@ide9827 Жыл бұрын
просто охренеть как круто
@flepjack
@flepjack 3 жыл бұрын
Спасибо,Сергей, вы лучший!
@pavelios3577
@pavelios3577 6 жыл бұрын
Спасибо за урок.
@proox4557
@proox4557 3 жыл бұрын
Очень хороший урок! Вообще канал просто супер! Каждое видео - все по делу, никакой воды! Если будет возможность, сделайте видео по boost::bind в связке с boost::asio. Очень не хватает хорошего понятного материала по этой теме
@sashatim8244
@sashatim8244 6 жыл бұрын
Спасибо!
@kolosrodoskyi
@kolosrodoskyi 6 жыл бұрын
благадарачка. Как всегда.
@inbtcwetrust6747
@inbtcwetrust6747 2 жыл бұрын
спасибо тебе друг, наконец-то кто то мне объяснил что такое фунтуры, теперь пойду смотреть лямбду
@idhoppers
@idhoppers 6 жыл бұрын
Желаю тебе много-много подписчиков, спасибо за уроки!
@PanVladyslav
@PanVladyslav 6 жыл бұрын
урок супер ,давно ждал его
@cheatack2141
@cheatack2141 3 жыл бұрын
Классный урок, очень интересно.
@СарматПересветов
@СарматПересветов 2 жыл бұрын
очень интересно, спасибо!
@aleksandercross5936
@aleksandercross5936 5 жыл бұрын
После "указателей на функции" смотрю это, чтобы понять что же такое лямбда функции). Спасибо вам за уроки
@АлексейБаринов-ь5н
@АлексейБаринов-ь5н 3 жыл бұрын
Боже, как это круто
@dmitry2334
@dmitry2334 6 жыл бұрын
Отличные уроки , на ютюбе только основы , а у тебя все мелочи и это помогает развиваться .Вопрос будет ли оьучение c# или python?
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
c# будет, точно когда не скажу.
@croche3398
@croche3398 6 жыл бұрын
Как всегда на высоте! В том же духе!
@mykhailomorhal2181
@mykhailomorhal2181 6 жыл бұрын
Спасибо)
@TheTimur123
@TheTimur123 3 жыл бұрын
Круто!!!
@ЯрославГоловко-ф6и
@ЯрославГоловко-ф6и 4 жыл бұрын
спасибо
@progerlife6690
@progerlife6690 5 жыл бұрын
Офигеть!!!! Спасибо!!!Лайк и подписка!!!!!
@geraltt1455
@geraltt1455 4 жыл бұрын
круто!
@archi6200
@archi6200 6 жыл бұрын
v top!
@PanVladyslav
@PanVladyslav 6 жыл бұрын
поскорее бы видио урок про лямбды
@bchelste
@bchelste Жыл бұрын
👍🏽
@stensej6841
@stensej6841 4 жыл бұрын
Потный урок , но интересный !
@godfather7695
@godfather7695 Ай бұрын
я так понял, что function это делегат типа func в с#, который прекрасно кушает лямбда выражения, например в методах LINQ, а указатель на функцию это простой делегат из с# который может хранить ссылки на различные функции и использоваться как объект
@Канал-ш7с
@Канал-ш7с 7 ай бұрын
а зачем это нужно если есть указатели на функцию?
@nikitasuyazov2060
@nikitasuyazov2060 4 ай бұрын
А кто говорил, что будет легко? Концентрация знаний из прошлых уроков. Вроде бы понял всё при помощи отладчика, но нужен опыт, чтобы прям вникнуть и не сомневаться.
@jangiryanarsen4952
@jangiryanarsen4952 6 жыл бұрын
объектная сущность-обертка функции Foo
@digimikeh
@digimikeh 4 жыл бұрын
thanks, what is the difference between std::function and lambdas?
@777noob777saibot
@777noob777saibot 3 жыл бұрын
Это как обобщение в Си шарп. Видимо в обоих языках эти фигурные скобки используются одинаково. И Вектор тоже использует это обобщение.
@roflkek6901
@roflkek6901 3 жыл бұрын
шаблоны?(templates)
@777noob777saibot
@777noob777saibot 3 жыл бұрын
@@roflkek6901 да
@Uni-Coder
@Uni-Coder 6 жыл бұрын
Таки чем же отличается std::function от обычного указателя на функцию?
@DevilAlex03
@DevilAlex03 5 жыл бұрын
std::function - класс, указатель на функцию - указатель на функцию
@defined_user
@defined_user 5 жыл бұрын
В С++ функции и указатели на функции имеют свой четкий тип, так void foo(int i) имеет тип "функция принимающая 1 аргумент целочисленного значения и возвращающая пустоту". Указатель на нее будет иметь тип "указатель на ф-ю ... (см. выше)". Если рассматривать методы класса (для примера взят метод класса А), то их тип - "функция класса А, принимающая 1 аргумент ... (см. выше)" - совершенно другой тип, указатель на нее - "указатель на функцию класса А ... (см. выше)". В связи с этим, ранее описанный указатель на глобальную ф-ю не может указывать на метод класса А, так же как и указатель на метод класса А не может указывать на глобальную функцию, ведь их типы совершенно разные. Аналогичная ситуация происходит с использованием указателя на метод класса, когда у нас есть несколько классов, ведь void foo(int i) из класса А и void foo(int i) из класса В будут иметь разные типы. std::function же позволяет указывать на любую функцию, независимо от того является ли она методом класса, методом какого класса, глобальной или анонимной.
@АлексейСвиридов-о5э
@АлексейСвиридов-о5э 4 жыл бұрын
@@hvac_vdk Объект типа std::function может содержать не только непосредственно указатель на функцию, но и указатель на "функциональный объект", т.е. объект некоторого класса, для которого переопределен operator() - оператор круглых скобок. В таком случае синтаксис вызова этого переопределенного оператора у объекта будет совпадать с синтаксисом вызова обычной функции.
@TheTimur123
@TheTimur123 3 жыл бұрын
@@defined_user чётко объяснил! Спасибо!!
@leemon6574
@leemon6574 Жыл бұрын
@@defined_user Указатель на функцию также "позволяет указывать на любую функцию, независимо от того является ли она методом класса, методом какого класса, глобальной или анонимной". То есть, нет никакой разницы в использовании между указателем на функцию и шаблоном std::function во всех случаях указанных в предыдущем коментарии, кроме случая с "функциональным объектом".
@КОД-ш8у
@КОД-ш8у 5 жыл бұрын
А теперь ДЗ: сделать так что бы результаты двух функций вывродились отдельно друг от друга, тоесть вначале БАР потом ФОО (разделённые бекспейсом)
@hdfroggit3051
@hdfroggit3051 4 жыл бұрын
местами поменять foreach с числами и foreach с функциями (в теле foreach с функциями будет foreach с числами в теле которого будет fel(el); )
@wldzam
@wldzam 3 жыл бұрын
please lessons for QT
@medetkhanaltynbek1442
@medetkhanaltynbek1442 3 жыл бұрын
Incredible! Real Brainiac ahah
@TheTimur123
@TheTimur123 3 жыл бұрын
Подскажите, разве нельзя передавать указатель на массив указателей на функции? В чем преимущество именно std::functional ?
@Kokurorokuko
@Kokurorokuko 2 жыл бұрын
defined_user: В С++ функции и указатели на функции имеют свой четкий тип, так void foo(int i) имеет тип "функция принимающая 1 аргумент целочисленного значения и возвращающая пустоту". Указатель на нее будет иметь тип "указатель на ф-ю ... (см. выше)". Если рассматривать методы класса (для примера взят метод класса А), то их тип - "функция класса А, принимающая 1 аргумент ... (см. выше)" - совершенно другой тип, указатель на нее - "указатель на функцию класса А ... (см. выше)". В связи с этим, ранее описанный указатель на глобальную ф-ю не может указывать на метод класса А, так же как и указатель на метод класса А не может указывать на глобальную функцию, ведь их типы совершенно разные. Аналогичная ситуация происходит с использованием указателя на метод класса, когда у нас есть несколько классов, ведь void foo(int i) из класса А и void foo(int i) из класса В будут иметь разные типы. std::function же позволяет указывать на любую функцию, независимо от того является ли она методом класса, методом какого класса, глобальной или анонимной.
@mikhail_kochubey
@mikhail_kochubey 2 жыл бұрын
Здравствуйте! Как создать массив из функций с разными сигнатурами? (если это вообще возможно)
@wldzam
@wldzam 3 жыл бұрын
im here now
@olegiv4814
@olegiv4814 Ай бұрын
С указателями на функцию меньше затрат.
@primate472
@primate472 3 жыл бұрын
урок #0, 1лям просмотров #142, 17к просмотров
@sofiyabelskaya7650
@sofiyabelskaya7650 4 жыл бұрын
А можно ли осуществить перегрузку таких функций разными сигнатурами объекта std::function?
@kvoistinov
@kvoistinov 3 жыл бұрын
можно, поскольку в перегрузке будет конкретное инстанцирование шаблона std::function, т. е. свой тип.
@АлександраЕменка
@АлександраЕменка 2 жыл бұрын
Вопрос: незя в функции do вставить 2 функции эти а не через vector передавать?
@eugheniygancharik3276
@eugheniygancharik3276 6 жыл бұрын
Немного не понимаю, зачем это нужно, если вместо класса function можно использовать typedef и указатель на функцию typedef void(*FUNC)(int) Результат будет таким же, просто реализация без сторонних инклудов или я ошибаюсь?
@hdfroggit3051
@hdfroggit3051 4 жыл бұрын
Именно такая сигнатура используется и поддерживается в STL
@Tragraph
@Tragraph 6 жыл бұрын
Так это же с# делегат.
@SimpleCodeIT
@SimpleCodeIT 6 жыл бұрын
Очень похоже
@zo8349
@zo8349 Ай бұрын
Извините, а не легче ли просто добавить условие в функции бар и фу, мол если не четное, вызывается бар к примеру? Хотя возможно массив функций уместен при большом их кол- ве, но я в этом опыта не имею. По поводу того что постоянно придётся менять эти 2 поля, ну и что, зато не нужны будут никакие массивы функций. И программа будет проще и меньше ресурсов займёт.
@anatoliyv5607
@anatoliyv5607 Жыл бұрын
как описать сигнатуру метода класса?
@АлонияРинэ
@АлонияРинэ 6 жыл бұрын
Здравствуйте, только что нашла ваш канал, так что заранее прошу прощения, если вы уже затрагивали эти вопросы. Подскажите, пожалуйста, при написании на с++ в visual studio 2017 или code blocks какая версия языка идёт по умолчанию, т е как понять на какой версии языка я пишу?
@АлонияРинэ
@АлонияРинэ 6 жыл бұрын
Спасибо!
@STRANEV
@STRANEV 3 жыл бұрын
Чё-то я так и не понял, в чем преимущество объектов function, над указателями на функции?..
@HeavyHeavyvich
@HeavyHeavyvich 5 жыл бұрын
Все же в чем отличие от указателя на функцию? Просто удобная обертка?
@sergeykirdyankin7027
@sergeykirdyankin7027 Жыл бұрын
Есть ли отличие от указателей на функцию?
@docaner
@docaner Жыл бұрын
Как я подразумеваю, указатель на функцию хранит в себе адрес функции. Объект function уже хранит в себе непосредственно саму функцию. Различия соответственно в скорости доступа и занимаемой памяти, если я всё правильно понял.
@Genberi
@Genberi 6 жыл бұрын
Только не понял почему при втором переборе используется ссылка на элементы. void Perebor(vector &v, vector fuVect) { for (auto el : v) { for (auto &fEl : fuVect) { fEl(el); } } }
@maxchatsky2898
@maxchatsky2898 5 жыл бұрын
Скорее всего, это для оптимизации. Чтобы копия функции не создавалась и не занимала лишнего места.
@tsohee9145
@tsohee9145 5 жыл бұрын
Там она (ссылка) и для первого элемента используется. Только не понятно почему для первого вектора прием по ссылке объявлен в объявлении переменных функции. а для второго не там же, а в объявлении цикла.
@tsohee9145
@tsohee9145 5 жыл бұрын
В общем и так и так работает и вообще не по ссылке тоже все работает. Без разницы.
@guiterenzog2723
@guiterenzog2723 2 жыл бұрын
17:45, почему по ссылке?
@ДмитрийНормов-ю6ц
@ДмитрийНормов-ю6ц 2 жыл бұрын
потому что нам не надо менять значения.
@guiterenzog2723
@guiterenzog2723 2 жыл бұрын
@@ДмитрийНормов-ю6ц, передача данных по ссылке как раз и позволяет менять значение
@ДмитрийНормов-ю6ц
@ДмитрийНормов-ю6ц 2 жыл бұрын
@@guiterenzog2723 , ага. Ну и экономия памяти...
@sagecat5696
@sagecat5696 6 жыл бұрын
Прошу прощения, не могли бы вы мне помочь? Я очень бы хотел начать осваивать оконное программирование, но только вот не знаю с чего начать и что выбрать (WINAPI, MFC, CLR). Как лучше начинать изучать его? Во первых, стоит ли остановится на средствах языка С++ или уже намного лучше программировать с С#, Java? Во вторых, я бы хотел изучить оконное программирования не на уровне, как в редакторе набросать кнопочек, а более глубоко, где мне искать ресурсы, ибо перечитывать документацию майкрософт, я думаю будет неэффективно.
@iii-mk7no
@iii-mk7no 5 жыл бұрын
Используй визуал студию или Qt. Там нет ничего сложного в создании оконного проекта. Вин апи он сложнее на мой взгляд. Там без документации некуда, читай на МСДН как работает функция и методы и вперед. Изучив С++ тебе потом не составит никакого труда перейти на с# и ява. Зато ты в полной мере поймешь что такое наследование , полиморфизм и инкапсуляция. И с паттернами более лучше разберешься. Еще плюс С++ в том что он строго типизированный язык, и имеет более низкий уровень, можешь так же и с железом работать. Еще его плюс в том, что он более мощный и гибкий(лично мое мнение), да все самое топовое пишется в основном на нем. Какой нибудь Асасинс Крид или Крайзис не сделать с применением явы, с# что то более ли мение близкое еще можно, и то скорее всего сам движек будет написан на с++, а сама реализация игры уже на шарпе. Про Pyton, вообще отдельный разговор. Одни эти отступы задолбут, код съедит вправо что потом хрен свой код сам поймешь. Он проще, но в тоже время и убогий. На нем хорошо писать нейросеть и для вэб разроботки. Я лично разбирался так. Нашел инструкцию как создать вин приложение в визуал. Оно было не вин апи, там использовался почти чистый с++. Взял за образец другую программу и пытался тупо ее скопировать. Накидал кнопок и т.д. и писал свою реализацию к ним. А вин апи в первые пришлось использовать когда писал взлом к игре. Свой инжектор. Как бы немного подсмотрел другие реализации в интернете. Взял от туда методы, зашел на МСДН. Читал как сделать снимки системы, найти процесс, хендлы и тд. Поставь для себя конкретную задачу, написать что то. Сделай план на бумаге - если в голове все удержать не можешь. А потом гугли как решить то или иное, конкретно из твоей задачи. И методом проб и ошибок ты добъешься результата. Поймешь работу, синтаксис и тд.
@МаксимРебянов
@МаксимРебянов 4 жыл бұрын
@@iii-mk7no Есть ли смысл идти работать стажером C++, если планируешь потом осваивать другой язык программирования (C#)? И как понять, что у меня достаточно знаний?
@iii-mk7no
@iii-mk7no 4 жыл бұрын
@@МаксимРебянов Все языки программирования они С подобные. (думаю только асемблер небольшое исключение из правил. Там больше на машинный код похоже) . А так освоив С++ вы сможете в полной мере насладится ООП, понять весь смысл парадигм, понять что такое типы данных(строго типизированный язык) и т.д. Я периодически пишу на Pyton. После С++ это как задачи первого класса решать. А С# он практически тот же С++, только немного облегченный для программиста. Добавили сборщиков мусора и других вещей о чем нужно было думать в С++. Если у тебя есть возможность влезть в эту сферу и тем более в С++, даже не сомневайся. С него ты вольешься в другие языки. А вот если с пайтона в с++ уже будет труднее.
@mosdomveteran9323
@mosdomveteran9323 5 жыл бұрын
Вот здесь у меня сломалась голова.
@XXX-to8fv
@XXX-to8fv 4 жыл бұрын
Лично я не понял преимущества functional я могу так же сделать все.Получается на 2-3 стр больше,но при этом я голову не ломаю
@Kokurorokuko
@Kokurorokuko 2 жыл бұрын
defined_user: В С++ функции и указатели на функции имеют свой четкий тип, так void foo(int i) имеет тип "функция принимающая 1 аргумент целочисленного значения и возвращающая пустоту". Указатель на нее будет иметь тип "указатель на ф-ю ... (см. выше)". Если рассматривать методы класса (для примера взят метод класса А), то их тип - "функция класса А, принимающая 1 аргумент ... (см. выше)" - совершенно другой тип, указатель на нее - "указатель на функцию класса А ... (см. выше)". В связи с этим, ранее описанный указатель на глобальную ф-ю не может указывать на метод класса А, так же как и указатель на метод класса А не может указывать на глобальную функцию, ведь их типы совершенно разные. Аналогичная ситуация происходит с использованием указателя на метод класса, когда у нас есть несколько классов, ведь void foo(int i) из класса А и void foo(int i) из класса В будут иметь разные типы. std::function же позволяет указывать на любую функцию, независимо от того является ли она методом класса, методом какого класса, глобальной или анонимной.
@PanVladyslav
@PanVladyslav 6 жыл бұрын
почему функция Baz отработала быстрее всех ? это из - за того что мы туда ничего не передали ? никакой логики помимо cout ?
@proKaps
@proKaps 6 жыл бұрын
Не думаю, что заметно было, что она отработала быстрее. Просто она выводила каждое число из-за отсутствия какой-либо проверки на условие, и выводила не быстрее, а больше раз через другие функции.
@hcoderhy768
@hcoderhy768 8 ай бұрын
F.U.B.A.R????
@TonyStark-b4w
@TonyStark-b4w 7 ай бұрын
Что ??
@Antonov_Ivan.
@Antonov_Ivan. 9 ай бұрын
Спасибо за урок!
@miroslavklyukovsky683
@miroslavklyukovsky683 2 жыл бұрын
Спасибо!
@xaoc3932
@xaoc3932 2 жыл бұрын
Круто!!
@DD0S2
@DD0S2 3 жыл бұрын
спасибо
@НикитаСолотин
@НикитаСолотин 3 жыл бұрын
спасибо
@pashudzu
@pashudzu 5 ай бұрын
Спасибо
Yay😃 Let's make a Cute Handbag for me 👜 #diycrafts #shorts
00:33
LearnToon - Learn & Play
Рет қаралды 117 МЛН
How many people are in the changing room? #devil #lilith #funny #shorts
00:39
快乐总是短暂的!😂 #搞笑夫妻 #爱美食爱生活 #搞笑达人
00:14
朱大帅and依美姐
Рет қаралды 14 МЛН
Python - полный курс для начинающих. Этот навык изменит твою жизнь.
5:27:42
C++ Weekly - Ep 332 - C++ Lambda vs std::function vs Function Pointer
16:30
C++ Weekly With Jason Turner
Рет қаралды 34 М.
КАК ЧИТАТЬ И ПОНИМАТЬ С/C++ КОД?
8:21
Winderton
Рет қаралды 196 М.
Всё об указателях в C++ за 20 минут
20:00
Yay😃 Let's make a Cute Handbag for me 👜 #diycrafts #shorts
00:33
LearnToon - Learn & Play
Рет қаралды 117 МЛН