En algún código que estoy arreglando, lo que hace un uso intensivo de los genéricos y tipos interconectados, estoy consiguiendo el error¿Qué significa el error del compilador delphi E2134?
E2134, Type '<void>' has no type info.
Creo que es porque estoy en el medio de una refactor donde un conjunto anidado de las unidades que usan genéricos no están sincronizadas, pero el error no ocurre en un lugar donde pueda usar el mensaje de error para corregir el código, porque no hay nada de malo en el código, en la ubicación donde aparece el error .
Aquí es el contexto, burlado, porque no puedo enviar el código, hay demasiado:
unit GenericThing;
...
interface
...
type
...
IThingListOf<ThingT> = interface(IThingContainer)
function getEnumerator: TEnumerator<ThingT>;
function getCount: Integer;
function getThing(Index: integer): ThingT;
function getFirst: ThingT;
function IndexOf(value: ThingT): integer;
function addItem(const Thing: ThingT): ThingT;
function removeItem(const Thing: ThingT): Integer;
procedure clear;
procedure Sort; overload;
procedure Sort(const AComparer: IComparer<ThingT>); overload;
property Count: integer read getCount;
property First: ThingT read getFirst;
property Items[Index: integer]: ThingT read getThing; default;
end;
// error appears on whatever line number comes after the declaration of IThingListOf<ThingT>...end;
function AnythingYouLikeHere:Integer; // there is nothign wrong with this line, but you get the E2134 here.
Parece que el problema está en IThingContainer sí:
IThingContainer = interface ...
...
procedure DoSomething(const Param);
end;
LA arriba "const Param" no tiene información de tipo. Esto es extraño (axila) de Pascal/Delphi en mi opinión, donde violas por completo la idea de Wirth de escribir fuerte. Es tan débilmente tipeado como un puntero "void *" en C, o el tipo "Pointer" en Delphi, pero rara vez se usa, excepto en lugares como las funciones RTL preobjeto-pascal estándar como Move, y así en. En mi opinión, los parámetros sin tipo en las interfaces, utilizados en los genéricos, deberían permitirse o no, pero no permitirse a veces, y no permitirse otras veces.
Este es un caso de una función a partir de 1978 Pascal mezcla mal con una característica ObjectPascal de 2009.
BRILLANTE. Gracias. –