Inner struct accessing host member

Philippe Sigaud via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Aug 5 22:53:54 PDT 2014


Era:
>  broken_b.foo(); //i_a is accessible invisibly because 
> overridden or transformed assuming it would be converted or 
> copied/moved as appropriate.
>
>  return b; //if a is a local variable then b becomes invalid 
> even though it's a struct.
>  return i_b; //same as return b
>  return broken_b; //same as above two cases.

I see. I didn't know one could create an A.B 'outside'. I saw 
inner types as Voldemort types, but that is true only for inner 
structs in functions.



>  Now a current way to make it safe while still leaving it 
> structs could be passing a reference to either the outer struct 
> or the variable in question. For simplicity it would probably 
> be the struct.
(...)
>  Or less safe is to use a pointer and assign it when b 
> instantiates to point back to A.. But if you pass B around 
> without A and A goes out of scope... same problem...
>
>  Maybe i'm over-thinking it.

I already tried to propagate a ref through A's methods, but that 
made a mess: I have lots of methods, which have all to transmit 
this ref, only for *one* of them being able to update it.

Thanks for you explanations :)
I'm now using classes and inner classes. I'm not fond of classes, 
but that's working correctly.


More information about the Digitalmars-d-learn mailing list