La explicacion parece un trabalenguas:
El desvío usando functors permite pasar 1 o mas argumentos a una funcion, pero esto en realidad no se hace al invocar la funcion, sino que se pasan al crear el objeto functor. Si este objeto provee del operador () las funciones que reciben y usan el functor la llaman para obtener el resultado.
En resumen lo que se hace es desplazar la responsabilidad de QUE HACER en el functor, dejando la responsabilidad de CUANDO HACERLO en la funcion que lo recibe.
Mirar, en el ejemplo, la funcion imprimeResultado(), recibe un tipo generico, se usa con 2 functors distintos
Los functors
Código C++:
Ver original#include <iostream>
using namespace std;
template <typename T>
class FMenor {
T _a;
T _b;
public:
FMenor ( const T& a, const T& b ) : _a(a), _b(b) {}
T operator()() {
if( _a < _b ) { return _a; }
return _b;
}
};
template <typename T>
class Fagrega1 {
T _a;
public:
Fagrega1 ( const T& a ) : _a(a) {}
T operator()() {
return _a+1;
}
};
La funcion
Código C++:
Ver originaltemplate <typename T>
void imprimeResultado( T f ) {
cout << f() << endl;
}
El uso
Código C++:
Ver originalint main()
{
Fagrega1<int> fa(2);
FMenor<int> fm( 30, 4 );
imprimeResultado( fa );
imprimeResultado( fm );
return 0;
}
Mirar funcionando aqui:
http://goo.gl/qqkXPt