On 01/06/2021 22:40, Sven Barth via fpc-pascal wrote:
Am 01.06.2021 um 20:20 schrieb denisgolovan via fpc-pascal:
I am trying to implement Option<T> type in FPC.
type
generic TOption<T> = record
case IsSome:boolean of
true: ( some: T );
false: ();
end;
Well as already discovered type like strings can not go into a "record case"
But... The above record is anyway of constant size. I.e. the memory for
the field is always included, even if it is not used.
Since the "false" block is empty, you can do
type
generic TOption<T> = record
IsSome:boolean;
some: T;
end;
It is not as expressive to the reader of the code. But it leads to the
same data in memory.
There is only a diff, if the other blocks of the record (the false
block) also has/have data.
With case the memory will overlap.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal