Библиотека C ++ - <функциональная>

Введение

Функциональные объекты - это объекты, специально разработанные для использования с синтаксисом, аналогичным синтаксису функций. Экземпляры std :: function могут хранить, копировать и вызывать любую вызываемую цель - функции, лямбда-выражения, выражения привязки или другие объекты функций, а также указатели на функции-члены и указатели на элементы данных.

Декларация

Ниже приводится объявление для std :: function.

template<class >
class function;

C ++ 11

template< class R, class... Args >
class function<R(Args...)>

Параметры

  • R - тип_результата.

  • argument_type - T, если sizeof ... (Args) == 1 и T - первый и единственный тип в Args.

пример

В приведенном ниже примере для std :: function.

#include <functional>
#include <iostream>

struct Foo {
   Foo(int num) : num_(num) {}
   void print_add(int i) const { std::cout << num_+i << '\n'; }
   int num_;
};
 
void print_num(int i) {
   std::cout << i << '\n';
}

struct PrintNum {
   void operator()(int i) const {
      std::cout << i << '\n';
   }
};

int main() {
   std::function<void(int)> f_display = print_num;
   f_display(-9);

   std::function<void()> f_display_42 = []() { print_num(42); };
   f_display_42();

   std::function<void()> f_display_31337 = std::bind(print_num, 31337);
   f_display_31337();

   std::function<void(const Foo&, int)> f_add_display = &Foo::print_add;
   const Foo foo(314159);
   f_add_display(foo, 1);

   std::function<int(Foo const&)> f_num = &Foo::num_;
   std::cout << "num_: " << f_num(foo) << '\n';

   using std::placeholders::_1;
   std::function<void(int)> f_add_display2= std::bind( &Foo::print_add, foo, _1 );
   f_add_display2(2);
 
   std::function<void(int)> f_add_display3= std::bind( &Foo::print_add, &foo, _1 );
   f_add_display3(3);

   std::function<void(int)> f_display_obj = PrintNum();
   f_display_obj(18);
}

Пример вывода должен быть таким -

-9
42
31337
314160
num_: 314159
314161
314162
18

Функции-члены

Sr. No. Функции-члены Определение
1 (конструктор) Он используется для создания нового экземпляра std :: function
2 (деструктор) Он используется для уничтожения экземпляра std :: function
3 оператор = Используется для назначения новой цели
4 замена Используется для обмена содержимым
5 назначать Используется для назначения новой цели
6 оператор bool Он используется для проверки наличия допустимой цели
7 оператор () Он используется для вызова цели

Функции, не являющиеся членами

Sr. No. Функции, не являющиеся членами Определение
1 std :: swap Он специализируется на алгоритме std :: swap
2 оператор == оператор! = Он сравнивает std :: function с nullptr

Классы операторов

Sr. No. Классы операторов Определение
1 bit_and Это класс объектов с функцией побитового И
2 bit_or Это класс объекта с функцией побитового ИЛИ
3 bit_xor Это класс объекта побитовой функции XOR.
3 разделяет Это объектный класс функции деления
4 равно Это класс функционального объекта для сравнения на равенство
5 больше Это класс функциональных объектов для сравнения с большим неравенством.
6 больше_равно Это класс функционального объекта для сравнения "больше или равно"
7 Меньше Это класс функциональных объектов для сравнения с меньшим неравенством.
8 less_equal Это класс функционального объекта для сравнения «меньше или равно»
9 логическое_и Это логический объектный класс функции И
10 логическое_не Это логический класс объекта функции НЕ.
11 логический_или Это логический класс объекта функции ИЛИ
12 минус Это объектный класс функции вычитания
13 модуль Это объектный класс функции модуля
14 умножается Это объектный класс функции умножения
15 отрицать Это объектный класс отрицательной функции
16 not_equal_to Это класс функционального объекта для сравнения без равенства
17 плюс Это дополнительный класс объекта функции