[Lazarus] Forward declare (modern) records [was: Re: "global" operator overloading]
Lukasz Sokol
el.es.cr at gmail.com
Tue Feb 26 17:04:53 CET 2013
On 26/02/2013 15:39, ListMember wrote:
> On 2013-02-26 17:18, Sven Barth wrote:
[...]
>> It would be no use anyway. You CAN NOT have the record used as a field inside itself, so you'd need to define a pointer type anyway. And this is something where we won't do things behind the programmers back. If you need a pointer then you declare one.
>
> Well.. yes and no.
>
> Here is my use-case:
>
> I am working (on and off) on string classes. I have basically 3 string types: TByteString, TWordString, TCardinalString string each representing a different char/codepage width/bytesize.
>
> And, I'd like to have the user-facing interface to be somethig like this:
>
> TByteString = record
> {...}
> public
> property AsWordString: TWordString read GetWordString write SetWordString;
> property AsCardinalString: TCardinalString read GetCardinalString write SetCardinalString;
> end;
>
> TWordString = record
> {...}
> public
> property AsByteString: TByteString read GetByteString write SetByteString;
> property AsCardinalString: TCardinalString read GetCardinalString write SetCardinalString;
> end;
>
> TCardinalString = record
> {...}
> public
> property AsByteString: TByteString read GetByteString write SetByteString;
> property AsWordString: TWordString read GetWordString write SetWordString;
> end;
>
> Having these properties would be very useful; but if I have to use pointers, then I believe it would force almost all the rest of the calling code to be based on pointers --defeating the purpose of simplicity for the user.
>
Would it not do to have classes here (s/record/class) and [Set|Get][Byte|Word|Cardinal]String be
class procedure; //'s
and/or
class function; //'s
instead ?
L.
More information about the Lazarus
mailing list