Functional (C++)
В контекстні мови програмування C++, functional
це файл заголовку, що є частиною Стандартної бібліотеки C++ і містить набір зумовлених
шаблонів класів для функціональних об'єктів (функторів), включаючи арифметичні операції, порівняння, і логічні операції. Екземплярами цих шаблонів є класи C++, які визначають оператор виклику функції, і екземпляри цих класів можуть викликатися так, ніби ці об'єкти є функціями.[1] Це дає можливість виконувати дуже складні операції без написання нового функціонального об'єкту, просто поєднуючи заздалегідь визначені функтори і адаптери функціональних об'єктів.
Основним призначенням шаблону класів std::function
, що запропонований в C++11 відігравати роль поліморфної функції обгортки[en].
Екземпляри функтора std::function
можуть зберігати, копіювати, і викликати цільові функції, лямбда вирази (вирази, що визначають анонімні функції), вирази зв'язування (bind expressions) (екземпляри функцій адаптерів, які перетворюють одні функції в інші функції з меншою арністю повертаючи значення для частини аргументів), або інші функціональні об'єкти.
Алгоритми, що надаються Стандартною бібліотекою C++ не потребують функціональних об'єктів з більше ніж двома аргументами. Функціональні об'єкти, які повертають значення типу Boolean є важливим окремим випадком. Унарні функції, які повертають логічний тип bool
називаються предикатами, а бінарні функції, які повертають тип bool
називаються бінарними предикатами.
Функціональний об'єкт це будь-який об'єкт, для якого визначений оператор виклику функції. Функціональні об'єкти це об'єкти, які спеціально спроектовані так, щоб використовуватись із синтаксисом
схожим на виклик звичайної функції. В C++, це досягається шляхом визначення функції класу operator()
, наприклад:
struct myclass {
int operator()(int a) {return a;}
} myobject;
int x = myobject (0); // використовується об'єкт, але синтаксис подібний до виклику функцій
Вони зазвичай використовуються як аргументи функцій, таких як предикати або функції порівняння, які передаються в стандартні алгоритми.
- ↑ Josuttis, Nicolai M. (1999). The C++ Standard Library. Addison-Wesley. ISBN 0-201-37926-0.
- C++ reference for standard function objects [Архівовано 27 червня 2011 у Wayback Machine.]