问题
Is there any way to determine the size in bytes of something like
TItem <T> = record
Data : T;
end;
Can I write something like
function TItem <T>.GetByteSize : Integer;
begin
if (T = String) then
Result := GetStringByteSize (Data as String)
else
Result := SizeOf (Data);
end;
or perhaps with the help of specialization?
function TItem <String>.GetByteSize : Integer;
begin
Result := GetStringByteSize (Data)
end;
function TItem <T>.GetByteSize : Integer;
begin
Result := SizeOf (Data);
end;
Thanks!
回答1:
Is there something wrong with taking the size of the instantiated type?
SizeOf(TItem<string>)
Or you could define GetByteSize like this:
function TItem <T>.GetByteSize : Integer;
begin
Result := SizeOf(TItem<T>);
end;
回答2:
No, you can't specialize depending on type as far as I know
来源:https://stackoverflow.com/questions/802011/size-of-generic-type