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

Reply via email to