![]() |
Clases que dependen de un tipo de datos
La idea es hacer una lista doblemente enlazada en memoria en la que se puede guardar cualquier cosa, y poder enlazar cada registro en memoria, con cualquier cosa (Tag de un Twincontrol, o con cada elemento de un Tstring)
Es para evitar el uso del Tstring.AddObject, ya que al usar ese método, tenemos que encargarnos de crear / liberar cada objeto y hacer un casting cada vez que queremos acceder a dicho elemento. Estoy creando una clase que al tiempo de crearla, se debe decir el tipo de dato que va a contener, por ejemplo: Código:
Lo que quiero es que al crear la clase se pudiera hacer esto: Código:
L := TLIstaEnlazada.Create(TRecordFile);¿Se puede hacer? Gracias infinitas por vuestra ayuda |
Sin ahondar demasiado en tu pregunta... ¿Es esto lo que buscas?:
Código:
type |
po si, po si, tiene muy buena pinta la respuesta delphi.com.ar
Lo pruebo y comento el resultado. Muchas gracias |
Con mucho acongojo tengo que informar que no compila :(
type TRecordFileClass = class of TRecordFile; el portero de discoteca (en este caso el compilador) dice: Type Class Required :confused: -------------------------------- Intentaré plantear la pregunta de otra forma. El usuario final de la clase haría algo así como esto: Crea 2 tipos de datos (registros), Templeado y TFactura Código:
{private declaration en su forma correspondiente }y Fclass para añadir las facturas por ejemplo. Mi pregunta es: ¿Como debería de estar declarada la clase ListaEnlazada? He estado mirando la ayuda de Delphi sobre el tema, pero parte de las Clases Tobject o Tedit, así que el bosque no me deja ver el árbol. Creo que se complica la cosa, gracias a dios no sé hasta que punto :p Saludos y Gracias por adelantado. |
No puedes hacer esto:
Código:
type¿Para qué usar records si puedes usar clases? Por otra parte no entiendo bien cómo quieres lograr la genericidad. Una vez que usas clases puedes agregar cualquier objeto como se hace con un TObjectList y posteriormente hacer el "casting" cuando tengas que acceder a cada objeto. Si deseas a toda costa evitar el "casting" puedes definir una clase base para tu lista enlazada que se encargue de todo el manejo (las listas enlazadas sólo requieren un apuntador al objeto que guardan así que pedes hacerla independiente del tipo de objeto): Código:
typeCódigo:
typeCódigo:
Result := TFactura(inherited Objects[Index]);Desde luego que lo mejor sería oder declarar algo así como Código:
property Objects[Index]: TVariantObject;// Saludos |
Ups... no me había dado cuenta que se trataba de un record....
Si quieres puedes tener un dato del tipo Pointer o un parámetro no tipado, para recibir cualquier puntero a un record.. pero creo que solo complicarías las cosas. Saludos! |
Cita:
La verdad, queria empezar desde cero para despues ir subiendo de nivel, pero ya veo que no me queda más remedio que meterme de lleno en el asunto con los Tobjects para comprender como funciona. :o Cita:
Cita:
Parece que he partido de un planteamiento incorrecto :( Desde luego me habeis enseñado donde está el camino, ahora me toca recorrerlo ;) ¡¡ Muchas gracias por vuestras indicaciones !! |
| La franja horaria es GMT +2. Ahora son las 21:55:28. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi