Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/02/2014, 05:10
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Usar un método que tiene otro método como argumento

Hola de nuevo:

Sigo con mi grafo y ahora me encuentro con otro problema.

Tengo una clase Grafo. Esta clase tiene un método (en este caso no es recursivo, pero igualmente me ha de tratar varios valores) así:
Código C++:
Ver original
  1. template <typename datonodo_t, typename datoarista_t>
  2. void Grafo<datonodo_t,datoarista_t>::recorrerHijos(pNodo& padre,void (*pfunc)(pArista& a))
  3. {
  4.     if (padre->adyacente!=0)
  5.         {
  6.             pArista A=padre->adyacente;
  7.              while (A->siguiente!=0)
  8.                 {
  9.                     pfunc();
  10.                     A=A->siguiente;
  11.                 }
  12.             pfunc();
  13.         }
  14. }

Siguiendo los consejos que me dió CalgaryCorpus en el anterior post relacionado, soy capaz de tratar las aristas que recorre el método...pero desde main.

Ahora tengo otra clase que contiene un Grafo, además de unos tipos abstractos en sus nodos/aristas.

Entonces ahora quiero hacer lo que hacía (por ejemplo imprimir) pero desde un método de la clase nueva.

Ahora tengo dos métodos:
Código C++:
Ver original
  1. void MostrarHijos()
  2. {
  3.     G.recorrerHijos(padre, imprimir);
  4. }

y

Código C++:
Ver original
  1. void imprimir(pArista a)
  2. {
  3.     cout<<a->destino->datonodo.LeeNombre()<<endl;
  4. }

Pues bien, me arroja un error:
Código:
<unresolved overloaded function type>)’
Buscando en Google me lleva a un error similar en StackOverflow, y parece que mi error se debe a que para invocar a la función imprimir() debo instanciar un objeto de la clase, y luego llamar al método de ese objeto.

Incluso aqui ponen un código de ejemplo....lo que pasa es que mis conocimientos no me dan para entender exactamente cómo resuelven el problema:
Código C++:
Ver original
  1. printf("%d\n", test([=](int v){return this->f2(v);}, 5));
The = there will capture this, which is what you need to call f2.

(esto que he pegado sólo tiene sentido leyendo el enlace a StackOverflow que he puesto.)

Bueno, pues en definitiva...¿como puedo hacer yo lo mismo?
O concretando...¿cómo uso una método de una clase que tiene otro método como argumento?

Gracias, como siempre!