[C con Clase] Sistema de eventos en C++. Callbacks

Miguel Ángel Torres Fernández-Píñar miguelangeltorresfp en gmail.com
Vie Dic 27 18:22:30 CET 2013


uf, Steven, muchísimas gracias por estos ejemplos y aclaraciones.

El primer ejemplo me viene como anillo al dedo.

El segundo no lo entiendo del todo. Realmente sé más o menos lo que es el
polimorfismo, pero aun no he conseguido llegar al paso en el que integre
eso en mis programas. Poco a poco.

Pero es GENIAL !!!! tener a profesores que te puedan ir resolviendo dudas
conforme te vas encontrando con los problemas.

Algún día espero poder entrar en un sitio a trabajar y tener alguien como
tú de referencia.

Un super saludo a tí y a todos los demás de la lista !!!.


El 27 de diciembre de 2013, 17:52, Davidson, Steven <srd4121 en njit.edu>escribió:

> Hola Miguel Ángel,
>
> 2013/12/27 Miguel Ángel Torres Fernández-Píñar <
> miguelangeltorresfp en gmail.com>
>
>> Hola a todos,
>>
>
> [CORTE]
>
> He pensado en que por ejemplo podría tener un método en "Gestor_Principal"
>> que fuera "change_state". Le podría pasar una referencia de este método a
>> cada clase en el momento de crearla.
>>
>>
> No aconsejo usar punteros a funciones miembro (métodos), porque creas una
> relación demasiada estrecha entre las clases. Si optas por usar
> polimorfismo, no podrías hacerlo por el puntero a la función miembro de una
> clase específica, cuando te interesaría elegir otras funciones miembro de
> otras clases en la jerarquía.
>
> Lo que sí puedes hacer es "registrar" el objeto del gestor dentro de cada
> objeto del estado. De esta manera, puedes invocar 'change_state()' del
> gestor; por ejemplo,
>
> class GestorEstados
> {
>   ...
>   void CambiarEstado( Estado *pNuevo );
> };
>
> class Estado
> {
> protected:
>   GestorEstados *pge;
>
> public:
>   Estado( GestorEstados *ptr ) : pge(ptr)  {}
>
>   void CambiarEstado( Estado *pNuevo )
>   {
>     pge->CambiarEstado( pNuevo );
>   }
>   ...
> };
>
> Aquí tenemos 'CambiarEstado()' en ambas clases, para facilitar su uso. Sin
> embargo, quizá no sea necesario tener un puntero al gestor como miembro de
> cada estado y basta con pasar el objeto polimórfico de 'GestorEstados' a
> cada función miembro de la clase 'Estado'. Por ejemplo,
>
> class GestorEstados
> {
>   void CambiarEstado( Estado *pNuevo );
>   ...
> };
>
> class Estado
> {
>   ...
>   void CambiarEstado( GestorEstados *pge, Estado *pNuevo )
>   {
>     pge->CambiarEstado( pNuevo );
>   }
> };
>
> Aquí, pasamos el gestor en el momento que se necesite, en lugar de que
> cada objeto de 'Estado' mantenga un puntero al gestor.
>
>
> Espero que esto te ayude.
>
> Steven
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20131227/2b59bc08/attachment.html>


Más información sobre la lista de distribución Cconclase