В Delphi 2009 мы можем использовать типы классов в качестве ограничения для объявления универсальных типов:
type
TMyBaseClass = class
//Attributes and methods here
end;
type
TMyGenericClass<T: TMyBaseClass> = class
//Attributes and methods here
end;
Но когда мне нужен атрибут типа TMyGenericClass<TMyBaseClass>
, объявленный внутри TMyBaseClass
, необходимо предварительное объявление, чтобы избежать отношений циклической ссылки/ограничения между классами. Но в этом конкретном случае компилятор говорит, что тип класса не является допустимым ограничением:
type
TMyBaseClass = class; //forward declaration
TMyGenericClass<T: TMyBaseClass> = class //the error is highlighted here, with [DCC Error] E2510 Type 'TMyBaseClass' is not a valid constraint
//Attributes and methods here
end;
TMyBaseClass = class
private
FObject: TMyGenericClass<TMyBaseClass>; //This is a requirement
//Other attributes and methods here
end;
Любая рекомендация для выполнения этой задачи? Спасибо!