Struct inside a class: How to get outer?

Steven Schveighoffer schveiguy at yahoo.com
Mon Dec 4 14:01:08 UTC 2017


On 12/3/17 2:38 AM, Jonathan M Davis wrote:
> On Sunday, December 03, 2017 01:05:00 Nick Sabalausky  via Digitalmars-d-
> learn wrote:
>> Is this even possible? My attempts:
>>
>> class Outer {
>>    struct Inner {
>>        void foo() {
>>            // Error: no property 'outer' for type 'Inner'
>>            Outer o = this.outer;
>>
>>            // Error: cannot implicitly convert expression
>>            // this of type Inner to testNested.Outer
>>            Outer o = this;
>>        }
>>    }
>> }
> 
> As I understand it, there is no outer for nested structs, only nested
> classes. So, you'll either have to use a nested class or explicitly pass a
> reference to the outer class to the nested struct.

Yes, for structs inside structs or classes, there is no 'outer' member.

However, there is a hidden context member in a struct if it's nested 
inside a function. In that case, you must label the struct "static"

The only reason inner classes have outer pointers to their "owner" class 
instance, is for those familiar with Java programming style 
(specifically, IIRC, it was to write dwt, which was a port of jwt). I 
believe Walter mentioned elsewhere recently, he would have done things 
differently today.

-Steve


More information about the Digitalmars-d-learn mailing list