![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Потому что это два разных типа. Прочитай документацию.