Biblioteca C ++ - <funcional>

Introducción

Los objetos de función son objetos diseñados específicamente para usarse con una sintaxis similar a la de las funciones. Las instancias de std :: function pueden almacenar, copiar e invocar cualquier objetivo invocable: funciones, expresiones lambda, expresiones de enlace u otros objetos de función, así como punteros a funciones miembro y punteros a miembros de datos.

Declaración

A continuación se muestra la declaración de la función std ::.

template<class >
class function;

C ++ 11

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

Parámetros

  • R - result_type.

  • argument_type - T si sizeof ... (Args) == 1 y T es el primer y único tipo de Args.

Ejemplo

En el siguiente ejemplo para 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);
}

La salida de muestra debería ser así:

-9
42
31337
314160
num_: 314159
314161
314162
18

Funciones de miembro

No Señor. Funciones de miembro Definición
1 (constructor) Se utiliza para construir una nueva instancia de función std ::
2 (incinerador de basuras) Se utiliza para destruir una instancia de función std ::
3 operador = Se utiliza para asignar un nuevo objetivo.
4 intercambiar Se utiliza para intercambiar contenidos.
5 asignar Se utiliza para asignar un nuevo objetivo.
6 operador bool Se utiliza para comprobar si hay un objetivo válido.
7 operador() Se utiliza para invocar al objetivo.

Funciones no miembros

No Señor. Funciones no miembros Definición
1 std :: swap Se especializa en el algoritmo std :: swap
2 operador == operador! = Compara una función std :: con nullptr

Clases de operador

No Señor. Clases de operador Definición
1 bit_and Es una clase de objeto de función AND bit a bit
2 bit_or Es una clase de objeto de función OR bit a bit
3 bit_xor Es una clase de objeto de función XOR bit a bit.
3 divide Es una clase de objeto de función de división.
4 igual a Es una clase de objeto de función para la comparación de igualdad.
5 mayor Es una clase de objeto de función para una comparación de desigualdad mayor que
6 mayor_igual Es una clase de objeto de función para comparación mayor o igual a
7 Menos Es una clase de objeto de función para la comparación de desigualdad menor que
8 less_equal Es una clase de objeto de función para comparación menor o igual a
9 y_lógico Es una clase de objeto de función lógica Y
10 no_lógico Es una clase de objeto de función lógica NOT
11 lógico_o Es una clase de objeto de función lógica OR
12 menos Es una clase de objeto de función de resta.
13 módulo Es una clase de objeto de función de módulo
14 multiplica Es una clase de objeto de función de multiplicación.
15 negar Es una clase de objeto de función negativa
dieciséis no igual a Es una clase de objeto de función para la comparación de no igualdad.
17 más Es una clase de objeto de función de suma