¿Hay alguna forma de determinar el tipo de variable pasada como argumento para un método? Considere la clase:Delphi: determinar el tipo real de un genérico?
TSomeClass = class
procedure AddToList<T: TDataType; U: TListClass<T>>(Element: T; List: U);
end;
con la implementación del método
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;
donde TInt.Create() y TString.Create() tienen diferentes conjuntos de argumentos, sin embargo, ambos se heredan de TDataType.
Ahora, sé que el operador is
no se puede usar así, pero ¿hay alguna alternativa legal que haga lo que estoy pidiendo aquí?
Si lo primero que hace en su código genérico es escribir un código específico para cada valor genérico posible, entonces ya no está escribiendo código genérico. Este no es el lugar para usar los genéricos. –
Gracias por la entrada Rob. Cuando publico preguntas en SO (y en otros lugares), suelo encontrar versiones simplificadas de mi código real. La extracción de la esencia del problema es, en mi experiencia, más útil que la presentación del código del código del mundo real, que generalmente es bastante más complejo. Por lo tanto, considere el código anterior como una ilustración de un problema mayor. Por cierto, me encantaría leer sobre una alternativa al código anterior. Por favor revisa mi pregunta de seguimiento: http://stackoverflow.com/questions/1761487/delphi-generics-and-is-operator-problem. ¡Estoy esperando cualquier entrada en esa publicación! :) – conciliator