Esiste un modo per determinare il tipo di una variabile passata come argomento a un metodo? Si consideri la classe:Delphi: determina il tipo effettivo di un generico?
TSomeClass = class
procedure AddToList<T: TDataType; U: TListClass<T>>(Element: T; List: U);
end;
con l'implementazione del metodo
procedure TSomeClass.AddToList<T, U>(Element: T; List: U);
begin
if Element is TInt then
List.AddElement(TInt.Create(XXX))
else if Element is TString then
List.AddElement(TString.Create(YYY));
end;
dove TInt.Create() e TString.Create() hanno diverse serie di argomentazioni, eppure, entrambi ereditano da TDataType.
Ora, so che il is
-operator non può essere utilizzato in questo modo, ma esiste un'alternativa legale che fa ciò che sto chiedendo qui?
Se la prima cosa che fai nel tuo codice generico è scrivere un codice specifico per ogni possibile valore generico, non stai più scrivendo codice generico. Questo non è il posto dove usare i farmaci generici. –
Grazie per l'input Rob. Quando pubblico domande a SO (e in altri luoghi), di solito mi vengono in mente versioni del mio vero codice. Estrarre l'essenza del problema è, secondo la mia esperienza, più utile della presentazione di codice di codice del mondo reale che di solito è molto più complesso. Quindi, per favore considera il codice sopra l'illustrazione di un problema più grande. A proposito: mi piacerebbe leggere su un'alternativa al codice di cui sopra. Si prega di controllare la mia domanda di follow-up: http://stackoverflow.com/questions/1761487/delphi-generics-and-is-operator-problem. Non vedo l'ora di ricevere commenti su quel post! :) – conciliator