Newsgroup: it.comp.lang.delphi
Titolo: Arrai di puntatori

Salve a tutti,
provengo dal C/C++ quindi probabilmente sono forviato dalle tecniche
di programmazione relative a tale linguaggio, per questo ho il
seguente problema.
Ho la necessita' di dichiarare un array di puntatori relativi ad una
classe. Cio' di cui ho bisogno e' avere la possiblita' di allocare
questo array e di utilizzare anche una variabile puntatore
all'elemento corrente di tale array. Mi spiego con un esempio:
Supponiamo che abbia questa classe:
type MyClass = Class
Begin
    iIndex: Integer;
    strName: String;
    Constructor Create();
End;
Constructor MyClass.Create();
Begin
    self.iIndex := 0;
    self.strName := 'MyClass';
End;
Successivamente ho bisogno di dichiarare un array di puntatori del
tipo:
MyArray: Array [0..100] of ^MyClass;
CurrentElement: ^MyClass;
Durante l'utilizzo, ho bisogno di creare gli elementi dentro all'array
MyArray e di assegbare a CurrentElement l'ultimo elemento creato per
poi utilizzarlo indipendentemente dall'array.
Esempio:
MyArray[iCurrentItem] := MyClass.Create();
CurrentElement := MyArray[iCurrentItem];
Poi usare CurrentElement^ come istanza dell'oggetto MyClass.
Questo codice non funziona, da problemi, come posso fare?
Grazie.

 Questo codice non funziona, da problemi, come posso fare?
In delphi puoi usare la TList, alla quale passi le istanze delle tue 
classi, senza usare gli array che obbligano a gestire la dimensione.
In pratica quando ti serve una classe, la crei e la aggiungi alla tlist.
aggiungi:
List.Add(Pointer(TMiaclasse));
riprendi:
TMiaclasse(Tlist.Item(indice));
Non avrai problemi ad usare le liste, se arrivi dal c++. ;)
ciao
-- 
morde

 Non avrai problemi ad usare le liste, se arrivi dal c++. ;)
In effetti, scoperta questa cosa, mi torna molto semplice :)
Dato che ci sono ti pongo un'altra domanda: esistono contenitori di
dati associativi ? Ossia, contenitori che mettono in relazione coppie
chiave-valore in modo tale da impostare un etichetta per una classe e
immagazzinarla all'interno di un array associativo secondo questa
metodologia:
Classe1 := MyArray.Find('etichetta_1');
Classe2 := MyArray.Find('etichetta_2');
MyClass.Set('etichetta_1', Classe1);
Grazie molte, ciao.
--
iakko

 dati associativi ?
Prima dovresti specificare che delphi usi, perchč la VCL e l'RTL possono 
variare con le versioni.
Che mi ricordi io, provengo da D7, qualcosa di simile c'era nei combobox 
dove associavi ad un item un puntatore ad un tboject, di conseguenza a 
tutto ciň che vi discende (classi derivate per l'appunto).
Dai combobox a memoria discendo sugli items e penso che si tratti della 
tstringlist.
prova a vedere.
scusa ma non ho piů delphi installato e non posso darti riferimenti certi.
ciao
-- 
morde

 metodologia:
Se hai una versione recente di Delphi (2009+), puoi trovare tra i nuovi 
"contenitori" che supportano i Generics anche un "dizionario".
Altrimenti, cerca su Google e vedrai che implementazioni, dalla più 
semplice alla più elaborata, non mancheranno. :)
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

Marco Breveglieri ha scritto:

Potresti usare una string list. io facevo cosi
TMiaClasse.MioMetodo(ANome: string, ADato: Pointer);
var
LList: TStringList;
begin
   LList.AddObjects(ANome,TObject(ADato));
end
se guardi nella documentazione delle string list trovi anche il modo di 
indicizzarle.
Ing
Giuseppe Monteleone

 indicizzarle.
Grazie.
--
iakko


Banalmente, TStrings (anche se in realtà è pensata al contrario). E'
un array di stringhe E oggetti.
var key2find: string;
...
someObj :=
myStringAndObjectList.Objects[myStringAndObjectList.IndefOf(key2find)];
In Contnrs, fra le altre, c'è anche TClassList, oltre ad
implementazioni di stack, code, liste ordinate (_già_ da Delphi6)
Saluti
Paolo Arosio