Delphi 2010 Generics of Generics - PullRequest
       14

Delphi 2010 Generics of Generics

2 голосов
/ 26 января 2010

Как я могу хранить дженерики в TList дженериков, хранящемся в неуниверсальном объекте?

type
  TXmlBuilder = class
  type
    TXmlAttribute<T>= class
      Name: String;
      Value: T;
    end;

    TXmlNode = class
      Name: String;
      Attributes: TList<TXmlAttribute<T>>;
      Nodes: TList<TXmlNode>;
    end;
  ...
  end;

Компилятор говорит, что T не сброшен в

Attributes: TList<TXmlAttribute<T>>;

- Пьер Ягер

1 Ответ

2 голосов
/ 26 января 2010

TXmlNode не знает, что такое T. Что это должно быть?

Может быть, вы имели в виду:

TXmlNode<T> = class
  Name: String;
  Attributes: TList<TXmlAttribute<T>>;
  Nodes: TList<TXmlNode<T>>;
end;

... либо это, либо вам нужно указать тип.

Однако, похоже, вы что-то здесь упускаете. Обобщения позволяют вам создать отдельный класс для каждого типа, а не класс для всех типов. В приведенном выше коде TList содержит массив типов одинаковых , и вы, вероятно, хотите, чтобы они отличались . Рассмотрим это вместо:

  TXmlBuilder = class
  type
    TXmlAttribute= class
      Name: String;
      Value: Variant;
    end;

    TXmlNode = class
      Name: String;
      Attributes: TList<TXmlAttribute>;
      Nodes: TList<TXmlNode>;
    end;
  ...
  end;
...