Estoy tratando de escribir una función genérica que acepte tipos de parámetros coincidentes.
Delphi sí infiere el parámetro de tipo correctamente en el caso simple de argumentos simples.tipo de inferencia basada en el tipo de argumento genérico (Delphi)
por ejemplo:
type
TFoo = class
function Pair<T>(e1, e2: T): TList<T>;
end;
llamar a esto con aFoo.Pair(1, 2);
funciona perfectamente bien, pero cuando cambio la firma parámetro a un tipo genérico
type
TFoo = class
function InsertInto<T>(aList: TList<T>; aVal: T): TList<T>;
end;
y trato de llamarlo
aFoo.InsertInto(TList<String>.Create, 'bar');
, entonces el compilador se queja al respecto:
E2010 Incompatible types: 'Generics.Collections.TList<uTest.TFoo.InsertInto.T>' and 'Generics.Collections.TList<System.String>'
¿Hay alguna manera de que pueda escribir este método (o uno similar), de modo que el cliente no tenga que especificar el parámetro de tipo?
aFoo.InsertInto<String>(TList<String>.Create, 'bar');
Creo que el mensaje de error le da una pista de que la inferencia de tipo no hará el trabajo aquí. Claramente es un problema más difícil para el sistema de inferencia del compilador que el ejemplo simple en la parte superior de la Q. –
intentar hacer un primer parámetro ValT: tal vez eso haría más fácil el compilador, pero la posibilidad es muy muy pobre –
reemplazar "cadena "con" strign "y disfruta de E2010 Tipos incompatibles: 'System.Generics.Collections.TList' y 'Boolean' –