Discussion:
struct "genericos"
(demasiado antiguo para responder)
klass
2005-01-05 18:20:26 UTC
Permalink
Hola.
Estoy haciendo un programa que usa diferentes estructuras (struct).
Necesito declarar una función de la forma:

void nombreFuncion(X *entrada, Y *salida){

...

}


donde X e Y deben ser un struct general, es decir; que pueda pasar a
la función cualquier struct que el usuario defina. que debo poner en X
e Y??

Se puede hacer esto???. Espero la ayuda de alguien.

saludos
Zephryn Xirdal
2005-01-05 19:35:26 UTC
Permalink
klass wrote:
| Hola.
| Estoy haciendo un programa que usa diferentes estructuras (struct).
| Necesito declarar una función de la forma:
|
| void nombreFuncion(X *entrada, Y *salida){
|
| ...
|
| }
|
|
| donde X e Y deben ser un struct general, es decir; que pueda pasar a
| la función cualquier struct que el usuario defina. que debo poner en X
| e Y??
|
| Se puede hacer esto???. Espero la ayuda de alguien.
|
| saludos
void nombreFuncion(void *a,void *b);

Saludos.
Hue-Bond
2005-01-05 22:07:39 UTC
Permalink
Post by klass
void nombreFuncion(X *entrada, Y *salida){
donde X e Y deben ser un struct general, es decir; que pueda pasar a
la función cualquier struct que el usuario defina. que debo poner en X
e Y??
En principio con un puntero a void podrías, pero creo (me parece lógico) que
perderías la capacidad de acceder a los miembros de la estructura. Por lo
cual te tocaría hacer magia dentro de la función, y a nada que cambies la
estructura, tendrás que cambiar también la magia.

Vamos, que si las cosas funcionan como pienso, no te lo aconsejaría.
--
David Serrano
p***@nospam.demon.co.uk
2005-01-06 06:59:38 UTC
Permalink
Post by klass
Hola.
Estoy haciendo un programa que usa diferentes estructuras (struct).
void nombreFuncion(X *entrada, Y *salida){
...
}
donde X e Y deben ser un struct general, es decir; que pueda pasar a
la función cualquier struct que el usuario defina. que debo poner en X
e Y??
Se puede hacer esto???. Espero la ayuda de alguien.
saludos
I hope that you understand English; your English will be better
than my Spanish :-) One way that you might do this is with a
'union'. Suppose you have:

typedef struct x { ........ } X;
typedef struct y { ........ } Y;
typedef struct z { ........ } Z;
typedef struct etc...

you can then define

typedef struct general
{
int ID;
union uu { X; Y; Z; ... };
} G;

Then, you can call

void nombreFuncion(G *entrada, G *salida)
{
switch ( entrada->ID )
{
case ....: [code to process X]

case ....: [code to process Y]

case ....: [code to process Z]

default:
}
}

after having set entrada->ID to an appropriate value to identify
to the function what *G contains, for example 1 means type X, 2
means type Y, 3 means type Z etc.

Does that help?

Regards from UK
Pete
--
"We have not inherited the earth from our ancestors,
we have borrowed it from our descendants."
Loading...