Понадобилось тут описать несколько похожих структур данных, типа вариативных записей но посложнее, например:
type
TBase = packed record
ID: Cardinal;
Size: Integer;
end;
TBaseText = packed record
ID: Cardinal;
Size: Integer;
PropID: Word;
Value: array [0..31] of Char;
end;
TBaseID = packed record
ID: Cardinal;
Size: Integer;
Value: UInt64;
end;
Суть в том, что активно они активно используются, например так (это удобно, если потом записи меняются):
Write(TBaseIDVar, SizeOf(TBaseIDVar))
Так вот, была мысль сделать через
object:
type
TBase = packed object
ID: Cardinal;
Size: Integer;
end;
TBaseText = packed object(TBase)
PropID: Word;
Value: array [0..31] of Char;
end;
Но проблема в том, что SizeOf(TBaseText) = SizeOf(Pointer), хотя
object вроде не в куче хранится по-умолчанию?
И как теперь можно адекватно получить размер данных нужного объекта для записи его в поток?