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 |