Ver Mensaje Individual
  #4 (permalink)  
Antiguo 06/02/2014, 08:05
CalgaryCorpus
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Punteros a plantillas de funciones...¿posible?

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
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <typename T>
  5. class FMenor {
  6.    T _a;
  7.    T _b;
  8. public:
  9.    FMenor ( const T& a, const T& b ) : _a(a), _b(b) {}
  10.    T operator()() {
  11.      if( _a < _b ) { return _a; }
  12.      return _b;
  13.    }
  14. };
  15.  
  16. template <typename T>
  17. class Fagrega1 {
  18.    T _a;
  19. public:
  20.    Fagrega1 ( const T& a ) : _a(a) {}
  21.    T operator()() {
  22.      return _a+1;
  23.    }
  24. };

La funcion
Código C++:
Ver original
  1. template <typename T>
  2. void imprimeResultado( T f ) {
  3.   cout << f() << endl;
  4. }

El uso
Código C++:
Ver original
  1. int main()
  2. {
  3.    Fagrega1<int> fa(2);
  4.    FMenor<int> fm( 30, 4 );
  5.  
  6.    imprimeResultado( fa );
  7.    imprimeResultado( fm );
  8.  
  9.    return 0;
  10. }

Mirar funcionando aqui: http://goo.gl/qqkXPt
__________________
Visita mi perfil en LinkedIn

Última edición por CalgaryCorpus; 06/02/2014 a las 08:13