
09/09/2006, 19:39
|
| | Fecha de Ingreso: abril-2006 Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 10 meses Puntos: 2 | |
en C?:
podrias usar un diseño, al estilo polimorfico de C++, pero tambien podria haber una solucion mas facil.
por ejemplo usar una estructura auto descriptiva.
enum Tipo { Char, Short, Int, Long, Float, Long, PChar, PInt , etc..};
union Data { char datac, short datas, int datai, float dataf, char* datapc, etc..};
struct TTipo
{
Tipo tipo;
Data dato;
};
y una vez que tienes esta estructura ya puedes hacer tus funcines que la usen siempre verificando o asignando el tipo de dato a manejar.
ejemplo:
void Asignar(TTipo *destino, const TTipo *origen)
{
if(origen->tipo == PChar)
{
strcpy(destino->datopc, origen->datopc);
destino->tipo = origen->tipo;
}
else
{
destino->datoi = origen->datoi;
destino->tipo = origen->tipo;
}
aqui el problema seria que cada que crearas una nueva estructura tendria que asignar el tipo que es.
por ejemplo:
TTipo* Crear(Tipo type, Data value)
{
TTipo *var = (TTipo*)malloc(sizeof(TTipo));
if(type == PChar)
{
var->tipo = type;
strcpy(var->datopc, value);
}
else
{
var->tipo = type;
var->datoi = value;
}
return var;
}
TTipo miint = Crear(Int, 1000);
TTipo micad = Crear(PCarh, "Cadena");
TTipo var;
Asignar(var, miint);
//ahora var es una cadena.(Copia de micad).
para hacer una suma la funcion seria similar solo que tienes que verificar el tipo de ambos operandos.
TAl vez hay una manera mas facil usando preprocesador, pero ahora no estoy muy creativo, jeje.
Saludos. |