Functional (C++)

В контекстні мови програмування C++, functional це файл заголовку, що є частиною Стандартної бібліотеки C++ і містить набір зумовлених шаблонів класів для функціональних об'єктів (функторів), включаючи арифметичні операції, порівняння, і логічні операції. Екземплярами цих шаблонів є класи C++, які визначають оператор виклику функції, і екземпляри цих класів можуть викликатися так, ніби ці об'єкти є функціями.[1] Це дає можливість виконувати дуже складні операції без написання нового функціонального об'єкту, просто поєднуючи заздалегідь визначені функтори і адаптери функціональних об'єктів.

Основним призначенням шаблону класів std::function, що запропонований в C++11 відігравати роль поліморфної функції обгортки. Екземпляри функтора std::function можуть зберігати, копіювати, і викликати цільові функції, лямбда вирази (вирази, що визначають анонімні функції), вирази зв'язування (bind expressions) (екземпляри функцій адаптерів, які перетворюють одні функції в інші функції з меншою арністю повертаючи значення для частини аргументів), або інші функціональні об'єкти.

Алгоритми, що надаються Стандартною бібліотекою C++ не потребують функціональних об'єктів з більше ніж двома аргументами. Функціональні об'єкти, які повертають значення типу Boolean є важливим окремим випадком. Унарні функції, які повертають логічний тип bool називаються предикатами, а бінарні функції, які повертають тип bool називаються бінарними предикатами.

Функціональний об'єкт

Функціональний об'єкт це будь-який об'єкт, для якого визначений оператор виклику функції. Функціональні об'єкти це об'єкти, які спеціально спроектовані так, щоб використовуватись із синтаксисом схожим на виклик звичайної функції. В C++, це досягається шляхом визначення функції класу operator(), наприклад:

struct myclass {
  int operator()(int a) {return a;}
} myobject;

int x = myobject (0);           // використовується об'єкт, але синтаксис подібний до виклику функцій

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

Примітки

  1. Josuttis, Nicolai M. (1999). The C++ Standard Library. Addison-Wesley. ISBN 0-201-37926-0.

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.