tipo de dato indefinido o heterogeneo

geraud
25 de Octubre del 2005
Hola necesito hacer un programa que tenga un arreglo (o array) en el cual el tipo de dato sea heterogeneo, vale decir que cuando leo el dato si meto un entero, guarda un entero, pero si meto un char en la segunda posicion tambien lo guarda. Debe aceptar los tipos int char y float. Averiguando por ahi creo que se hace con plantillas (templates), pero por m´´as que he buscado, no entiendo como usarlas. Tambien se podria hacer si existiera un tipo de datro que acepte cualquiera de los tres tipos y hubiera una funcion que me dijera que tipo de dato es. Espero que alguien me pueda ayudar. De antemano, gracias

chuidiang
25 de Octubre del 2005
Hola:

El template te sirve para hacer un array o clase de un tipo de dato, pero solo de uno. Te ahorra hacerte tres clases, una para enteros, otroa para float y otra para char. En su lugar haces una unica para un tipo genérico y luego la instancias para float, para char o para int. No puedes mezclar datos dentro de una misma instancia. Si la instancia es de enteros, sólo admite enteros.

Tampoco puedes hacer un array que guarde tipos distintos. Mejor dicho, si puedes hacer uno de float. Puedes meter los char y los int en un float, pero luego no sabes de qué tipo son. Por ejemplo, un caracter 'A' es un ascii 65 que en float quedaría guardado como 65.0

Para saber el tipo, deberías llevar un array paralelo de algo que te diga el tipo de dato del otro (puede ser un enumerado, un char o lo que se te ocurra).

Otra opcion es hacer una estructura asi

struct
{
int tipo; // 0 es char, 1 es entero, 2 es float
float valor;
}

y hacer el array de estructuras de estas. Incluso si te quieres complicar un poco más, puedes usar una union,

Y si te metes con claess, puedes incluso complicarlo un poco más para conseguir lo mismo, pero de una forma más genérica.

En fin, forma directa no conozco, pero soluciones con un poco de trabajo hay muchas.

Se bueno

KIKE
25 de Octubre del 2005
se me ocurre que puedes declarar una union
union dato{
int entero;
float decimal;
char caracter;
}

despues declaras directamente un array y solo debes determinar el tipo de dato que recibes y asignarlo al miembro adecuado.
El uso de la union te ahorrara memoria..