C/Visual C - Punteros a funciones en Visual C++

 
Vista:

Punteros a funciones en Visual C++

Publicado por luis (17 intervenciones) el 15/01/2001 00:00:00
Agradecería de antemano cualquier tipo de ayuda.

PROBLEMA: ¿Como se pasa un puntero a una función entre clases diferentes?

CASO A RESOLVER: He derivado una clase de CButton ("CMiBoton") declarando en el fichero de cabecera ("MiBoton.h") un puntero a una función "genérica" ("void (Pulsar*)()"). Es decir:

// MiBoton.h

class CMiBoton : public CButton
{
...
void (Pulsar*)();
...
afx_msg void OnClick();
}

// MiBoton.cpp

void CMiBoton::OnClick()
{
(*Pulsar)();
}

La implementación de esta función ("Pulsar") se lleva a cabo en la ventana padre que contiene dicho botón ("CMiVentana") derivada de CDialog. Es decir:

// MiVentana.h

#include "MiBoton.h"

class CMiVentana : public CDialog
{
CMiBoton boton1;
CMiBoton boton2;
...
void Pulsar1();
void Pulsar2();
}

// MiVentana.cpp

void CMiVentana::Pulsar1()
{
MessageBox("Pulsó botón 1");
}

void CMiVentana::Pulsar2()
{
MessageBox("Pulsó botón 2");
}

A RESOLVER: ¿Cómo hago para desde la ventana padre ("CMiVentana") en "OnInitDialog" asignar a cada botón miembro su función correspondiente? Es decir, cuando pulse "botón1" ha de visualizarse "Pulsó botón 1" y lo mismo con botón 2, "Pulsó botón 2".

RESUMIENDO: QUIERO IMPLEMENTAR DICHO CODIGO DESDE LA VENTANA PADRE ¡¡¡OBLIGATORIAMENTE!!! ¿COMO LO HAGO?

Gracias por llegar has
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Punteros a funciones en Visual C++

Publicado por Pedro Pablo (37 intervenciones) el 16/01/2001 00:00:00
El problema es por los tipos.
El puntero a función que tu defines es un puntero a una función sin parámetros.
Sin embargo, la implementación de las funciones sí tienen un parámetro implícito: el parámetro this con el puntero al objeto para el que se ejecuta el método.
No puedes asignar una a otra porque los tipos son distintos.
No sé como puede resolverse. En C++ Builder existe el tipo __closure (o algo así) que es un puntero a una función de un objeto, por lo que realmente se guardan dos punteros, el this, y el de la función. Gracias a eso, puedes llamar a la función sin tener que preocuparte de nada más.
No sé si en Visual C++ habrá algo parecido.

Espero que por lo menos te haya aclarado algo, aunque no te lo solucione!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar