Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Templates and Inheritance


Exception ©   (2013-02-14 09:21:00) 

type
 TValue = class(TObject)
 public
   X: Integer;
 end;

 TValueHolder<TType: TValue> = class(TObject)
 private
   V: TType;
 public
   procedure Copy(AHolder: TValueHolder<TValue>);
 end;

 TValue2 = class(TValue)
 end;

 TValueHolder2 = class(TValueHolder<TValue2>)
 end;

{ TValueHolder<TType> }

procedure TValueHolder<TType>.Copy(AHolder: TValueHolder<TValue>);
begin
 V.X := AHolder.V.X;
end;

{ TForm2 }

procedure TForm2.Button1Click(Sender: TObject);
var
 Holder: TValueHolder<TValue2>;
 Holder2: TValueHolder2;
begin
 Holder := TValueHolder<TValue2>.Create;
 Holder2 := TValueHolder2.Create;

 Holder.Copy(Holder2); // [dcc32 Error] Unit2.pas(60): E2010 Incompatible types: 'Unit2.TValueHolder<Unit2.TValue>' and 'TValueHolder2'
end;


Delphi XE3

Why-у-у-у-у? (С) Annie Lennox


знайка   (2013-02-14 15:00:00) [1]


> TValueHolder2 унаследован от TValueHolder<TValue>.
это вам только кажется.


Exception   (2013-02-14 14:28:00) [2]

> Плохиш ©   (14.02.13 12:35) [1]

Да ну...

Метод procedure Copy(AHolder: TValueHolder<TValue>);должен принимать любого наследника класа TValueHolder с параметрическим типом-наследником класса TValue.
TValue2 унаследован от TValue.
TValueHolder2 унаследован от TValueHolder<TValue>.

Или наследование в шаблонах отменили?
Это временно, пока компилятор не допилили?
Или навсегда?


Плохиш   (2013-02-14 12:35:00) [3]

Потому что это два разных типа. Прочитай документацию.


Наверх

Титульная страница Поиск, карта сайта Написать письмо