Delphi 泛型类型的大小

Delphi 泛型类型的大小,delphi,generics,delphi-2009,specialization,Delphi,Generics,Delphi 2009,Specialization,是否有任何方法可以确定这样的内容的大小(以字节为单位) 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; TItem=记录 资料:T; 结束;

是否有任何方法可以确定这样的内容的大小(以字节为单位)

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;
TItem=记录
资料:T;
结束;
我能写些像这样的东西吗

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;
函数TItem.GetByteSize:整数;
开始
如果(T=String),则
结果:=GetStringByteSize(数据为字符串)
其他的
结果:=SizeOf(数据);
结束;
或者是借助专业化

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

function TItem <T>.GetByteSize : Integer;
begin
  Result := SizeOf (Data);
end;
函数TItem.GetByteSize:整数;
开始
结果:=GetStringByteSize(数据)
结束;
函数TItem.GetByteSize:整数;
开始
结果:=SizeOf(数据);
结束;

谢谢

不,据我所知,不能根据类型进行专门化

SizeOf(TItem<string>)
SizeOf(滴度)
或者您可以这样定义GetByteSize:

function TItem <T>.GetByteSize : Integer;
begin
  Result := SizeOf(TItem<T>);
end;
函数TItem.GetByteSize:整数;
开始
结果:=SizeOf(滴度);
结束;

我希望GetByteSize返回对象的字节大小,包括数据成员的大小,即对于T=String,我希望类似于“SizeOf(data)+Length(data)*SizeOf(Char)+4”的内容,这是一个非常不同的问题,不特定于泛型。尝试计算您所讨论的递归大小的问题是周期(对于对象引用)和共享。例如,对于T=String,您(a)应该添加12,而不是4(代码页:2,elemSize:2,refCnt:4,length:4),以及(b)如果字符串是共享的(refCnt>1),该怎么办?我知道这通常是一个非常困难的问题(我之前发布了一个关于此问题的问题),但我只想在这个特殊的场景中使用它,其中String是唯一需要额外处理的类型(对于其他类型,我只使用SizeOf)。我决定将共享视为一种优化,并计算“最坏情况下的大小”。