2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|||||||||||
1 | |||||||||||
Что такое функтор29.01.2017, 13:37. Показов 4323. Ответов 10
Метки нет (Все метки)
Доброе утро,
верное ли данное утверждение: (1) Код ниже - в местах где принимается абстракция по имени функтор, может быть обычная функция возвращающая true/false - так как возр значения функтора всегда игнорируется в алгоритмах, ведь ожидается void (2) Предикат это есть разновидность функтора - следовательно каждый предикат == функтор. Другая паралель, электронная сигарета не есть сигарета. (нет) (3) Есть источники, что утверждают, что функтор это объект с перегруженным operator() - среди них в том числе MrGluck, тыц. Но моё мнение, что это не так. Тут опять происходит подмена понятий абстракция и реализация. Функтором является всё что угодно, что можно вызывать так:
0
|
29.01.2017, 13:37 | |
Ответы с готовыми решениями:
10
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа? Что такое хэндлер файла? Что такое файловый указатель? Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них |
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
29.01.2017, 13:47 | 2 |
Моё мнение такое: о терминах не спорят, о них договариваются.
Вы можете называть функторами или предикатами всё что угодно. Но если в разговоре с другими людьми вы будете использовать необщепринятые значения слов, то ни к чему хорошему это не приведёт.
2
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
29.01.2017, 14:02 | 3 |
ИМХО
Под понятием "функтор" обычно подразумевается объект с перегруженным оператором (). Если говорить о самом моменте вызова т.е когда пишем name() то на самом деле пофигу как это называть, главное мы знаем что этот вызов сделает определенную вещь. Но под капотом классы с перегруженным оператором() могут быть более функциональными чем обычные функции. Все таки нужно учесть тот факт что экземпляр функтора это объект, методы которого могут быть логически сгруппированы в одну сущность (возможно даже с применением наследования) а функции так не умеют. Если вдаваться в корень это не одно и то же.
1
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
29.01.2017, 14:24 | 4 |
Предикат - частный случай функтора.
Соответственно Да. Нет. Функтор - это объект, который ведёт себя как функция. У меня сказано следующее: Добавлено через 1 минуту Я также согласен, что это больше вопрос терминологии, но по моему, функцию лучше не рассматривать как функтор, а называть прямо - функция.
1
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
29.01.2017, 14:25 [ТС] | 5 |
Почему?
То есть функция переданная в STL алгоритмы является функтором?
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
29.01.2017, 14:40 | 6 |
Потому что
Это значит что любой предикат - функтор т.к. является его подмножеством.
Она является функцией.
Кстати, на известном сайте понятие функция и функтор (объект-функция) различают: http://www.cplusplus.com/refer... /for_each/
1
|
25 / 25 / 5
Регистрация: 04.01.2017
Сообщений: 52
|
|
29.01.2017, 16:18 | 7 |
Интересная статья на эту тему "Stop calling "Function Objects" "Functors"
1
|
_Ivana
|
29.01.2017, 17:49
#8
|
0
|
tapochka
|
29.01.2017, 19:45
#9
|
Не по теме: тему лучше в священных войнах создавать... ибо https://habrahabr.ru/post/125995/
0
|
Модератор
|
|
31.01.2017, 07:17 | 10 |
rikimaru2013, надеюсь, Бьярне Страуструп всё ещё имеет какой-то вес в мире
C++ ?"The C++ programming language" (2013, 4th edition), страница 80:
Сообщение от Bjarne Stroustrup
У него же ранее в "The C++ programming language" (1997, 3rd edition [Special Edition]), страница 515:
Сообщение от Bjarne Stroustrup
rikimaru2013, в обеих книгах это единственный раз, когда Бьярне упоминает термин functor .Добавлено через 10 минут rikimaru2013, что касается стандарта, то ни в стандарте 1998-го года, ни в стандарте 2003-го года, ни в стандарте 2011-го года термин functor не встречается вовсе.
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
31.01.2017, 15:32 | 11 | |||||
вывод не очень четкий.
функтор - объект, который косит под функцию. у него конкретно перегружен оператор() предикат - вообще любая ботва, которая подходит по утиной нотации.
Кликните здесь для просмотра всего текста
запуск конструктора класса.
где нибудь в шаблончиках запросто сканает за предикат
1
|
31.01.2017, 15:32 | |
31.01.2017, 15:32 | |
Помогаю со студенческими работами здесь
11
Что такое IIS и что такое PWS? Почему одно без другого не работает? Что такое напряжение и что такое сила тока с позиции заряженных частиц Что такое монитор и что такое мьютекс? Это же разные вещи? Объект TDictionary. Что такое ключ и что такое значение? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |