Размер универсального типа - PullRequest
3 голосов
/ 29 апреля 2009

Есть ли способ определить размер в байтах что-то вроде

TItem <T> = record
  Data : T;
end;

Могу ли я написать что-то вроде

function TItem <T>.GetByteSize : Integer;
begin
if (T = String) then
  Result := GetStringByteSize (Data as String)
else
  Result := SizeOf (Data);
end;

или, возможно, с помощью специализации?

function TItem <String>.GetByteSize : Integer;
begin
  Result := GetStringByteSize (Data)
end;

function TItem <T>.GetByteSize : Integer;
begin
  Result := SizeOf (Data);
end;

Спасибо!

Ответы [ 2 ]

3 голосов
/ 29 апреля 2009

Что-то не так с определением размера экземпляра типа?

SizeOf(TItem<string>)

Или вы можете определить GetByteSize так:

function TItem <T>.GetByteSize : Integer;
begin
  Result := SizeOf(TItem<T>);
end;
0 голосов
/ 29 апреля 2009

Нет, вы не можете специализироваться в зависимости от типа, насколько я знаю

...