У меня есть следующее объявление класса в Delphi XE8:
TestClass = class;
TestClass = class
function test<T: TestClass>(supplier: TFunc<T>): T; // Compiler error
end;
Что вызывает следующую ошибку компилятора:
E2086 Type 'TestClass' is not yet completely defined
Когда я добавляю в смесь еще один класс и использую его в качестве ограничения, он работает нормально:
AnotherTestClass = class
end;
TestClass = class;
TestClass = class
function test<T: AnotherTestClass>(supplier: TFunc<T>): T; // No Error
end;
Я подозреваю, что проблема в том, что прямое объявление типа еще недостаточно сообщает Delphi о типе TestClass
. Возможно, это более очевидно, так как следующая попытка обойти проблему вызывает ту же самую ошибку компилятора в другой строке:
TestClass = class;
AnotherTestClass = class (TestClass) // Compiler Error
end;
TestClass = class
function test<T: AnotherTestClass>(supplier: TFunc<T>): T;
end;
Я делаю что-то не так, и если нет, то есть ли способ обойти эту проблему?