Ver Mensaje Individual
  #5 (permalink)  
Antiguo 11/02/2014, 05:18
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Punteros a plantillas de funciones...¿posible?

Gracias L3m0n por la interesante respuesta. La verdad es que a veces me parece que las uniones son las grandes desaprovechadas...están ahí y se usan poco. Me ha gustado mucho el enfoque que le has dado para guardar la lista de funciones a usar.

Pero al final he usado el "invento" de los functores.
La verdad es que me proporciona la ventaja del polimorfismo de C++.
Así, por ahora (y espero que me dure) lo he he hecho de ésta forma:
Código C++:
Ver original
  1. template <typename datonodo_t, typename datoarista_t>
  2. void Grafo<datonodo_t,datoarista_t>::recorrerHijos(const pNodo& padre, Tratar& tratamiento)
  3. {
  4.     if (padre->adyacente!=0)
  5.         {
  6.             pArista A=padre->adyacente;
  7.              while (A->siguiente!=0)
  8.                 {
  9.                     tratamiento(A);
  10.                     A=A->siguiente;
  11.                 }
  12.             tratamiento(A);
  13.         }
  14. }

en lugar del puntero a función le paso un objeto de la clase Tratar

y luego la clase Tratar es abstracta, y voy definiendo "la perrería" que le quiero hacer en cada clase derivada.

Código C++:
Ver original
  1. struct Tratar;
y de ahí derivo:
Código C++:
Ver original
  1. struct Buscar:public Tratar
ó
Código C++:
Ver original
  1. struct Imprimir:public Tratar

Y por supuesto, en las funciones miembro de la clase que maneja al grafo, tengo:

Código C++:
Ver original
  1. Tratar* tratamiento= new Buscar (nombreNodo, auxiliar);
ó
Código C++:
Ver original
  1. Tratar* tratamiento=new Imprimir (nombreNodo, auxiliar);

en cada función miembro.

Bueno, marco el tema como solucionado y me compro una botella de vino chileno para celebrarlo