Thread overview
Declaring constant references in struct members
Feb 16, 2017
David Zhang
Feb 16, 2017
H. S. Teoh
Feb 16, 2017
Adam D. Ruppe
Feb 16, 2017
David Zhang
Feb 16, 2017
Adam D. Ruppe
February 16, 2017
Hi,

Say I have a struct S that holds a reference to an object O. Is there a way to express that I want to be able to change the reference, but not what the reference points to? Thanks.

struct S {
    O object;
}

class O {
    size_t things.
}

February 15, 2017
On Thu, Feb 16, 2017 at 12:43:30AM +0000, David Zhang via Digitalmars-d-learn wrote:
> Hi,
> 
> Say I have a struct S that holds a reference to an object O. Is there a way to express that I want to be able to change the reference, but not what the reference points to? Thanks.
> 
> struct S {
>     O object;
> }
> 
> class O {
>     size_t things.
> }

Maybe have a look at std.typecons.Rebindable?


T

-- 
What do you call optometrist jokes? Vitreous humor.
February 16, 2017
On Thursday, 16 February 2017 at 00:43:30 UTC, David  Zhang wrote:
> struct S {
>     O object;
> }

import std.typecons;

Rebindable!O object;

http://dpldocs.info/experimental-docs/std.typecons.Rebindable.html

February 16, 2017
On Thursday, 16 February 2017 at 00:49:45 UTC, Adam D. Ruppe wrote:
> On Thursday, 16 February 2017 at 00:43:30 UTC, David  Zhang wrote:
>> struct S {
>>     O object;
>> }
>
> import std.typecons;
>
> Rebindable!O object;
>
> http://dpldocs.info/experimental-docs/std.typecons.Rebindable.html

Is there a similar mechanism for one struct holding another? Otherwise, you get a cannot modify X with immutable members error.

eg:

struct A {
    B b;
}

struct B {
    const size_t something;
}

A a = A(B(16));

//attempt to replace a.b with new B
a.b = B(32); //error: cannot modify struct a.b B with immutable members

February 16, 2017
On Thursday, 16 February 2017 at 01:05:58 UTC, David  Zhang wrote:
> Is there a similar mechanism for one struct holding another?

You'd have to make the member a pointer to the struct.


immutable(B)* b;