Alberto Bertogli, el 21 de agosto a las 23:34 me escribiste:
> On Tue, Aug 21, 2007 at 02:32:21PM -0300, Leandro Lucarella wrote:
> > Algo que empezó como una duda técnica ya se convirtió en una duda
> > existencial.
> >
> > El problema original era lograr declarar un puntero a función que devuelva
> > un funtero a función con la misma firma en C (C++ en realidad, pero para
> > el caso es lo mismo). Es decir, necesitaría algo como una declaración
> > recursiva.
>
> En esta pagina explican varias soluciones posibles, con sus ventajas y
> desventajas. Es bastante interesante =)
>
> La pagina es http://www.gotw.ca/gotw/057.htm, espero que te sirva! ;)
Sí, me sirve (de hecho lo estaba usando también para implementar una
máquina de estados ;). Una solución que estaba tejiendo era justamente
usando un wrapper (inspirado por la propuesta de gonzalo), pero me
estaba haciendo lío porque estaba haciendo al revés, sobracargando el
operator() y usando void* como retorno, en vez de sobrecargar el operador
de cast y usar el wrapper como retorno.
Igual, aunque diga que la solución es portable y correcta, no deja de
ser un hack, un hack que no es transparente para el usaurio (que tiene
que poner que su función retorna una cosa extraña y que ni siquiera
anda en C :S
Acá dejo el ejemplo que puse yo implementado de esta forma, así queda
para la posteridá:
------->8------->8------->8------->8------->8-------
#include <stdio.h>
struct func;
typedef func (*fp)();
struct func
{
fp f;
func(fp f): f(f) {}
operator fp () { return f; }
};
func f1();
func f2();
func f1() { printf("f1()\n"); return &f2; }
func f2() { printf("f2()\n"); return &f1; }
int main()
{
fp fp1 = f1();
fp fp2 = fp1();
fp fp3 = fp2();
return 0;
}
-------8<-------8<-------8<-------8<-------8<-------
Gracias!
--
Leandro Lucarella (luca) | Blog colectivo: http://www.mazziblog.com.ar/blog/
.------------------------------------------------------------------------,
\ GPG: 5F5A8D05 // F8CD F9A7 BF00 5431 4145 104C 949E BFB6 5F5A 8D05 /
'--------------------------------------------------------------------'
Hey you, out there in the cold
Getting lonely, getting old
Can you feel me?
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion