Compartir a través de


Objetos de función

Un objeto de función, o el functor, es cualquier tipo que implementa el operador ().Hacen referencia a este operador como el operador de llamada o a veces el operador de la aplicación.La biblioteca de plantillas estándar utiliza objetos de función principalmente como criterio de ordenación para los contenedores y en algoritmos.

Los objetos de función ofrece dos ventajas principales sobre una llamada de función recta.El primero es que un objeto de función puede contener el estado.El segundo es que un objeto de función es un tipo y por consiguiente se puede utilizar como un parámetro de plantilla.

Crear un objeto de función

Para crear un objeto de función, cree un operador de tipo e implementar (), por ejemplo:

class Functor
{
public:
    int operator()(int a, int b)
    {
        return a < b;
    }
};

int main()
{
    Functor f;
    int a = 5;
    int b = 7;
    int ans = f(a, b);
}

La última línea de la función de main muestra cómo se llama al objeto function.Esta llamada es una llamada a una función, pero está llamando realmente el operador () del tipo de Functor.Esta similitud entre llamar a un objeto de función y una función es cómo ocurrió el objeto function el término.

Objetos y contenedores de función

La biblioteca de plantillas estándar contiene varios objetos de función en el archivo de encabezado <functional> .Un uso de estos objetos de función está como criterio de ordenación para los contenedores.por ejemplo, se declara el contenedor de set como sigue:

template <
    class Key,
    class Traits=less<Key>,
    class Allocator=allocator<Key> >
class set

El segundo argumento de plantilla es el objeto lessde la función.Este objeto de función devuelve true si el primer parámetro pasado a es menor que el segundo parámetro pasado.Puesto que algunos contenedores ordenan sus elementos, el contenedor necesita una forma de comparar dos elementos, y esto se realiza mediante el objeto function.Puede definir dispone los criterios de ordenación para los contenedores creando un objeto de función y solo en la plantilla muestra para el contenedor.

Objetos y algoritmos de función

otro uso de objetos funcionales está en algoritmos.por ejemplo, se declara el algoritmo de remove_if como sigue:

template<class ForwardIterator, class Predicate>
    ForwardIterator remove_if(
        ForwardIterator _First,
        ForwardIterator _Last,
        Predicate _Pred
    );

El argumento pasado a remove_if es un objeto de función que devuelve un valor booleano ( un predicado).Si el resultado del objeto de la función es true, el elemento se quita del contenedor que se tiene acceso con los iteradores _First y _Last.Puede utilizar los objetos cualquiera de la función declarados en el encabezado de <functional> para el argumento _Pred o puede crear dispone.

Vea también

Referencia

Biblioteca de plantillas estándar