2014-10-29 2 views
0
type 
    TGeneric<T> = class(TBase) 
    public 
    procedure Swap(Harry : T); 
    procedure NotifyAll(AParams : T); 
    end; 

У меня есть два вопросаДженерики и массив сопзЬ

  1. Есть ли способ я могу типаж родовое переменную любого другого типа, как вариант и т.д.
  2. как я могу передать общий тип в функция, которая принимает массив сопзЬ как здесь

    Delphi - How can I pass Generic parameter to function that accept Array of const parameter

+0

Привет, Джон, в идеале вы задали бы два вопроса: –

+0

оба вопроса связаны, поэтому я спросил их здесь не отдельно. –

+1

Вы уже связали ответ на вопрос 2 или я что-то пропустил? –

ответ

1

Есть ли способ, что я могу типаж родовое переменную любого другого типа, как Variant и т.д.

Как указано в моем ответе на вопрос Вы связываетесь, тип вариант, который хорошо работает с дженериков является TValue. Вы можете сделать TValue экземпляр из общего типа с использованием метода: From

procedure TMyClass.Foo<T>(const Item: T); 
var 
    Value: TValue; 
begin 
    Value := TValue.From<T>(Item); 
end; 

Как я могу передать общий тип в функции, которые принимают array of const?

Это тот же вопрос, который задавали в question you linked to. Ответ такой же, как указано там, а именно, что вы не можете передать общий аргумент как variant open array parameter. Опять же, TValue на помощь. Вместо использования параметра открытого массива используйте открытый массив TValue.


Суть здесь в том, что тип вариант, который хорошо работает с обобщениями, и поставляется вместе с Delphi RTL, является TValue.

+0

, если я использую tvalue, он разбивает много других частей моего кода, поэтому я избегаю этого. –

+0

Вам нужно будет признать, что вы не можете передать общий аргумент как параметр открытого массива. –

+0

Могу ли я привести его в какой-то другой тип, а затем отправить его, но не Tvalue –

Смежные вопросы