J'ai la déclaration suivante d'une classe dans Delphi XE8:L'utilisation propre classe comme une contrainte de paramètre de type dans la déclaration de classe
TestClass = class;
TestClass = class
function test<T: TestClass>(supplier: TFunc<T>): T; // Compiler error
end;
qui jette l'erreur du compilateur suivant:
E2086 Type 'TestClass' is not yet completely defined
Quand j'ajoute une autre classe au mélange et utiliser celui-ci comme une contrainte à la place, cela fonctionne bien:
Je susp ect le problème est que la déclaration de type forward ne dit pas assez à Delphi sur le type TestClass
pour le moment. Ceci est peut-être plus évident depuis la tentative suivante pour contourner le problème jette la même erreur de compilation sur une autre ligne:
TestClass = class;
AnotherTestClass = class (TestClass) // Compiler Error
end;
TestClass = class
function test<T: AnotherTestClass>(supplier: TFunc<T>): T;
end;
que je fais quelque chose de mal et sinon, est-il un moyen de contourner ce problème?
Il semble que ce soit un bogue dans le compilateur donc j'ai soumis un [rapport de bogue ici] (https://quality.embarcadero.com/ browse/RSP-13348). – overactor
Certainement le code "TestClass = class; AnotherTestClass = class (TestClass) // Erreur de compilation end;" devrait produire l'erreur montrée parce que Delphi est un compilateur à passage unique. Mais je ne vois pas pourquoi cela devrait s'appliquer à la construction que vous essayez de créer. Il y a suffisamment d'informations disponibles pour que la définition soit valide. – Dsm
@Dsm est d'accord, mais comme l'erreur du compilateur est la même, j'ai pensé que c'était un indice de ce qui ne va pas. Cela introduit cependant un problème, et si je veux deux classes qui utilisent eachother comme une contrainte de paramètre de type? – overactor