alias this of non-public member

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Apr 7 09:40:29 PDT 2015


Hi!

Excuse me if this is obvious, but I can't recall coming across 
anything similar and a quick search returns nothing relevant:

struct Foo {
}

struct FooWrapper {
   alias x_ this;
   private Foo* x_; // doesn't work, as x_ is private
}

Basically, I want x_ to never be visible, except through the 
"alias this" mechanism, at which point it should instead be seen 
as public.

Assuming something like this is not already possible in a clean 
way, I would like to suggest a tiny(I think) addition to the 
language:

struct FooWrapper {
   public alias x_ this; // overrides the visibility through the 
alias;
   private Foo* x_;
}


While I think this would be useful for the language, the reason I 
want such a wrapper, is because I want to give opIndex, toString, 
to a pointer, or, in fact just value semantics, while keeping the 
rest of the interface through the pointer.

I thought about using a class instead of a struct pointer, but I 
am not sure about the memory layout for classes, nor about the 
efficiency of overriding Object's methods, so I didn't want to 
risk making it any less efficient. If someone could shed some 
light about D's class memory layout and general performance 
differences to a simple struct (or a C++ class for that matter), 
that would also be great. In general, more information about 
these sort of things would be great for us also-C++ programmers. 
:)


More information about the Digitalmars-d-learn mailing list