Newsgroup: it.comp.lang.delphi
Titolo: Un tipo assegnato a posteriori

Pensate ad una lista: essa funzionerebbe, senza sostanziali modifiche nel
codice, mettendo qualsiasi tipo T nella dichiarazione:
type Tnodo=record
    data:T;
    coda:Pnodo;
  end;
Ora mettiamo che io voglio fare un componente che incapsula una lista, con
metodi di ricerca per indice o cose simili, vorrei però fare in modo che il
tipo T sia assegnato nel main, in modo da non dovermi scrivere un componente
che cambi solo di una parola ogni volta che devo usare la lista con un nuovo
tipo. E' possibile ? Si vero ?
Come si fa ? Grazie e ciao !!!                    {MSX}
http://gpi.eden.it/
http://go.to/msx.home


semplice no?

>
Purtroppo il tipo variant, oltre a non essere proprio il massimo come
tecnica di programmazione, non è compatibile con i record.
Quacuno ha altre idee ?
Ciao e grazie !                        {MSX}

 semplice no?
Sì, anche se può risultare un po' lento...
Si potrebbe anche pensare ad utilizzare dei Pointer:
 dato:Pointer;
e poi fare gli opportuni cast...
Cmq il Variant può essere la soluzione ideale in situazioni non critiche...
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

tipo. E' possibile ? Si vero ?
Diciamo che vorresti i template del C++.
Tieni conto che un meccanismo simile Delphi lo realizza derivando
tutte le classi implicitamente da TObject.
Cioe', definendo
 TMyClass : class
    private
      ...
    public
      ...
 end;
questa classe e' implicitamente derivata da TObject. Quindi potresti
definirti la tua lista, usando come tipo generico TObject. In seguito
la potrai specializzare assegnando agli elementi della lista qualunque
classe preferisci. Quindi quello che tu chiami "T", puo' essere
agevolmente sostituito da TObject.
 
Ciao
--
Piero Bonanno
bop...@libero.it
pie...@tiscalinet.it
bop...@tin.it
bpie...@hotmail.com
______________________________________________
"Madame, lei ha tra le gambe uno strumento
che puo' offrire piacere a migliaia di persone,
e tutto quello che sa fare e' grattarlo"
- Sir Thomas Beechan a una violoncellista

Ciao MSX,
{MSX} ha scritto nel messaggio ...

mi vengono in mente due idee.
La prima è identica a quella di Andrea. Cioè utilizzi il Pointer come tipo
di dato.
Se leggi nell' help capirai meglio.
Poi però dovrai fare tutti i vari cast, comunque questo sistema lo
utilizzano un po' tutti.
Ad esempio con WinSock, per inviare dei dati, vuole semplicemente una
variabile che è un Pointer. Questo per risolvere il tuo stesso problema
(almeno credo).
Oppure potresti tentare di definire vari record ed utilizzare un record per
ogni tipo.
Prova un po' tu......il variant sarebbe stato comodo anche se non
consigliato. Del resto mi pare che il variant esista per via dell' OLE anche
se noi tentiamo di agganciarci a lui come l'unica via di salvezza. (in
pratica questo caso)
Non mi viene in mente altro.....sempre se poi ci siano alternative.
Ti saluto.....ciao e buona domenica !!
Antonio Tarolla
BSSoftware Tips Mailing - List Support

 Non mi viene in mente altro.....sempre se poi ci siano alternative.
Beh, a questo punto (non mi ricordavo che non si potesse infilare un variant
in un record anche se è logico: tutto l'allineamento va a farsi benedire...)
direi che potremmo definire un oggetto (TElemento) e dichiarare una property
Value di tipo Variant...
Dopo di che implementiamo la nostra lista di TElemento (per MSX: intendevi
derivare da TList, vero?)
Ciao :-)
Ps: la soluzione non è testata, e vista l'ora non so se è affidabile o
dovuta a qualche allucinazione post-sabato sera... ;-))
