Ограничение общего типа класса с предварительным объявлением - delphi 2009

В 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;

Любая рекомендация для выполнения этой задачи? Спасибо!


person Jonathan Olavarría    schedule 03.08.2015    source источник
comment
По-видимому, форвардное объявление является проблемой, но в то же время является решением для отношения циклической ссылки/ограничения =( Кто-нибудь проверял, компилируется ли это в более новых версиях Delphi?   -  person Jonathan Olavarría    schedule 04.08.2015
comment
Он не будет компилироваться ни в одной версии. Это ожидаемое поведение. Это так, как задумано. В любом случае, даже если он скомпилируется, чего не будет, отсутствие общей вариативности означает, что ваш предполагаемый дизайн будет бесполезен.   -  person David Heffernan    schedule 04.08.2015