type
A = record
case boolean of
true: (t: integer);
false: (f: array [0 .. 9999] of integer);
end;
А как-то выкрутиться можно?
"Можно и зайца научить курить" (С)
Смысл в чем?
В том, чтобы при записи в файл писать нужное число байт? Ну, так у тебя ж поля в разных вариантах не с одним именем, а с разными, то есть, ты однозначно знаешь, какое поле пишется, вот и вызывай SizeOf для него, а не для структуры в целом.
Для чего-то другого? Тогда расскажи для чего...
Для записи в файл.
Пишется вся структура (причём первое поле у неё - размер) блоком, при чтении же читается сначала размер, а потом столько байт, сколько нужно. Это для того, чтобы при будущем наращивании структуры париться по минимуму.
Писать руками каждое поле и переписывать загрузку/сохранение при каждом изменении, с кучей ветвлений на случай совместимости со старыми версиями? Не надо, я пробовал, мне не понравилось.
Вбивание размера в лоб, набором констант в зависимости от выбора варианта, проще, чем писать в файл поля по одному.
В общем выкрутился так:
type
A = record
Size: integer;
case B: boolean of
true: (t: integer; tLast: integer;);
false: (f: array [0 .. 9999] of integer; fLast: integer;);
end;
...
case B of
True: size := integer(@A) - integer(@A.tLast);
False: size := integer(@A) - integer(@A.fLast);
end;