Const sucks

Regan Heath regan at netmail.co.nz
Wed Sep 12 01:46:19 PDT 2007


Regan Heath wrote:
> Derek Parnell wrote:
>> On Tue, 11 Sep 2007 10:10:33 +0100, Janice Caron wrote:
>>
>>> On 9/11/07, Derek Parnell <derek at nomail.afraid.org> wrote:
>>>> In other words, if I have a struct with three members, each of a 
>>>> different
>>>> type, I need to code ...
>>>>
>>>> struct S3(T, U, V)
>>>> {
>>>>    T member1;
>>>>    U member2;
>>>>    V member3;
>>>> }
>>>>
>>>> S3!(const(int), const(float), const(bool));
>>>>
>>>> and so on for 4, 5, 6, .... 23 member structs.
>>>>
>>>> I'm sure I'm misunderstanding you, because this is really silly.
>>>>
>>> I don't think you're misunderstanding. I think that's what Walter is 
>>> saying.
>>
>> But why templates?!?!?
>>
>> How is that different from ...
>>
>>  struct S3
>>  {
>>     const(int) member1;
>>     const(float) member2;
>>     const(bool) member3;
>>  }
>>
>> No template involved.
>>
>> I'm reading Walter as saying that if any struct definition involves 
>> any of
>> its members being const/invariant, then one must define that struct in
>> terms of templates. Is this what Walter is really saying?
> 
> No, I don't think so.
> 
> I believe he is saying that if you have a struct, eg.
> 
> struct S1
> {
>   int a;
>   float b;
> }
> 
> and you want to use it, as is, in one place in your code but also use a 
> const version of this same struct somewhere else then you need to use a 
> template to create a modified struct definition to use.
> 
> If you simply want to convert a struct from non-const aware to 
> const-aware you can just add const to the definition and recompile.
> 
> If you simply want to have a const copy of the struct somewhere you can 
> just use const(S1), eg.
> 
> class Bob
> {
>   const(S1) data;
> }

To clarify (I hope).

A template is only required if you want to _tail_ const certain members 
(or even all) of an existing struct in some instances but not all instances.

Complete const can be achived with const(S1) and tail const on all 
instances can be achieved by editing the struct difinition and recompiling.

Regan



More information about the Digitalmars-d mailing list