C/Visual C - typedef esotérico

 
Vista:

typedef esotérico

Publicado por Cazaar (1 intervención) el 22/08/2002 22:06:33
alguien me puede informar si sabe que significa esta línea.

typedef double(_IMPLEMENTATION* LPRRFUNCTIONEXT) (double, LPARAM)
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:typedef esotérico

Publicado por Aiam el PASTOR (1 intervención) el 23/08/2002 06:45:29
Ese es el famoso typedef de Hamoru el diabólicodiosjaker. Las pruebas hablan por si solas.
Es uno de los enigmas de su libro: "303 Trucos para C++ y ...sizeof es binorma?" Editorial OlimpoJaker.

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

RE:typedef esotérico

Publicado por chuidiang (677 intervenciones) el 23/08/2002 23:45:59
No puedo asegurar nada, pero voy a intentarlo:

Una función también tiene un tipo. Por ejemplo, si tienes la función

char funcion(int);

un puntero a dicha función es del tipo

char (*)(int)

y la forma de declarar un puntero p a dicha función es

char (*p)(int)

y se podría hacer cosas como

p = funcion; // hace que p apunte a la funcion
p(3); // Llama a funcion(3);

Si queremos declarar un tipo que sea un puntero a dicha función, seria

typedef char (*mi_tipo)(int)

Como ves, la sintaxis es muy parecida a tu ejemplo. Esta declarando el tipo LPRRFUNCTIONEXT, que es un tipo puntero a funciones que devuelven double y admiten dos parámetros : double y LPARAM.

Me queda la duda de qué singnifica el _IMPLEMENTATION, pero tiene toda la pinta de ser alguna palabreja del visual c++, igual que LPARAM.

Se bueno.
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

RE:typedef esotérico

Publicado por El Mogur (202 intervenciones) el 25/08/2002 14:37:24
Estoy de acuerdo Estás declarando un tipo que es un puntero a una función con dos parámetros.
Ya somos dos que pensamos lo mismo ;)
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

RE:typedef esotérico

Publicado por Anonimo (8 intervenciones) el 29/08/2002 20:14:35
Parece la definición del tipo de datos LPRRFUNCTIONEXT
como puntero a una función devuelve un valor "double" y
toma dos argumentos: un "double" y un "LPARAM"
"_IMPLEMENTATION" seguramente es un modificador que
afecta a la convencion de llamada a la funcion.

Por ejemplo, un modificador de la convención de llamada
es "CALLBACK". Así yo puedo declarar un puntero a
una funcion de ventana llamado PFUNCIONVENTANA así:

LRESULT (CALLBACK *PFUNCIONVENTANA)(HWND, UINT, WPARAM, LPARAM);

O puedo declarar el tipo de datos PTRFVENTANA así:

typedef LRESULT (CALLBACK *PTRFVENTANA)(HWND, UINT, WPARAM, LPARAM);

Y luego usarlo para declarar punteros a funciones de ventana así:

PTRFVENTANA pFuncionDeVentana;
pFuncionDeVentana = windowproc;

donde windowproc es la funcion de ventana y las funciones
declaradas de esta manera se llamarían así:

retorno = (pFuncionDeVentana)(hwnd, codigomensaje, valor1, valor2);


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

RE:typedef esotérico

Publicado por Alvaro (122 intervenciones) el 02/09/2002 23:16:31
Yo creo que el tipo que hizo el programa tiene definido el tipo _IMPLEMENTATION en otra parte del código como __cdecl o __stdcall, ambos especificadores que indican si los parámetros de la funcion sin pasados en el mismo orden que se refleja en la declaración o en orden inverso...
creo que es así, __cdecl es la forma en que C pasa los parametros y __stdcall es la forma en la que lo hace pascal, Visual basic. ect..
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