вторник, 30 июня 2015 г.

Ссылка. here's still things I don't understand with Generic :/

https://plus.google.com/u/0/+PaulTOTH/posts/5BVhKN9Fw4C?cfem=1

Цитата:

"
here's still things I don't understand with Generic :/

type
  TValues<T> = array of record
    Key  : string;
    Value: T;
  end;//TValues<T>

  TIntegerValues = TValues<Integer>;

procedure TForm1.FormCreate(Sender: TObject);
var
  V: TIntegerValues;
begin
  SetLength(V, 1);
  V[0].Key := 'TEST';
  V[0].Value := 1;  // E2010 Incompatible types 'T' and 'Integer'
end;

"

Это ПРАВДА так?

Где тут "Incompatible types"?

Чего я не вижу?

(+) Только код. Коллекции от Embarcadero. Это что-то
(+) Generic'и в Delphi и шаблоны в C++. Коротко. Напишу грубость
(+) Про "примеси", шаблоны и Generic'и
(+) Про "примеси", шаблоны и Generic'и №2
(+) Containers 3. Generics and without Generics...

https://quality.embarcadero.com/browse/RSP-11388

2 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. камк всегда сожрал угловые скобки :(
    type
    TValue{T} = record
    Key : string;
    Value: T;
    class function Create(K: string, V: T): TValue{T}; static;
    end;//TValue{T}
    TValues{T} = Array of TValue{T};
    TIntegerValues = TValues{Integer};

    class function TValue{T}.Create(K: string, V: T): TValue{T};
    begin
    Result.Key := K;
    Result.Value := V;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    var
    V: TIntegerValues;
    begin
    SetLength(V, 1);
    V[0] := TValue.Create('TEST', 1);
    end;

    PS: код не проверял, возможно накосячил с массивом.

    ОтветитьУдалить