Objetos de função
A o objeto de função, ou functor, é qualquer tipo que implementa operator().Este operador é conhecido como o chamar o operador ou, às vezes, o o operador de aplicativo.A Standard Template Library usa objetos de função principalmente como critérios para os recipientes e em algoritmos de classificação.
Objetos de função fornecem duas vantagens principais ao longo de uma chamada de função reta.A primeira é que um objeto de função pode conter o estado.A segunda é que um objeto de função é um tipo e, portanto, pode ser usado como um parâmetro de modelo.
Criando um objeto de função
Para criar um objeto de função, um tipo de criar e implementar operator(), tais como:
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);
}
A última linha da main função mostra como você pode chamar o objeto de função.Essa chamada é semelhante a uma chamada para uma função, mas na verdade está chamando operator() do tipo Functor.Essa semelhança entre um objeto de função e uma função de chamada é como surgiu o termo objeto de função.
Recipientes e objetos de função
A Standard Template Library contém vários objetos de função na <functional> arquivo de cabeçalho.Um uso desses objetos de função é como um critério de classificação para contêineres.Por exemplo, o set contêiner é declarada da seguinte maneira:
template <
class Key,
class Traits=less<Key>,
class Allocator=allocator<Key> >
class set
O segundo argumento de modelo é o objeto de função less.Este objeto de função retorna true se o primeiro parâmetro passado para ele é menor do que o segundo parâmetro passado.Como alguns recipientes classificar seus elementos, o recipiente precisa de uma forma de comparar dois elementos e isso é realizado usando o objeto de função.Você pode definir seus próprios critérios para contêineres de classificação criando um objeto de função e especificando-o na lista de modelos para o recipiente.
Algoritmos e objetos de função
Outro uso de objetos funcionais é em algoritmos.Por exemplo, o remove_if algoritmo é declarado da seguinte maneira:
template<class ForwardIterator, class Predicate>
ForwardIterator remove_if(
ForwardIterator _First,
ForwardIterator _Last,
Predicate _Pred
);
O último argumento para remove_if é um objeto de função que retorna um valor booleano (um predicado).Se o resultado do objeto de função true, e em seguida, o elemento é removido do recipiente que está sendo acessado pelos iteradores _First e _Last.Você pode usar qualquer um dos objetos de função declarados na <functional> cabeçalho para o argumento _Pred ou você pode criar seus próprios.