How to make a transparent wrapper type?
Random D user via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Dec 7 11:13:20 PST 2015
I kind of miss reference values on stack, so I attempted to make
one in a struct.
Pointers are pretty good (since d doesn't have ->), but it would
be nice to avoid dereferencing them explicitly on assignment.
Since reference is a pointer that you can't change afterwards.
I tried something like this:
struct RefVal( T )
{
this( T* val ) { ptr = val; }
ref auto opAssign( T value ) { *ptr = value; return
*ptr; }
ref auto opAssign( ref T value ) { *ptr = value; return
*ptr; }
alias ptr this;
T* ptr;
}
This works for most basic cases but breaks in:
struct Foo
{
this( int k )
{
a = k;
}
void opAssign( int k )
{
a = k;
}
int a;
}
Foo foo = Foo(2);
Foo baz = Foo(3);
RefVal!Foo bar = RefVal!Foo( &foo );
bar = baz;
bar = 5; // Ooops! doesn't work
Is there a way to transparently pass everything to *RefVal.ptr?
Also is there a way to make "alias ptr this" to work with
"private T*"?
Ideally I wouldn't want to give access to the ptr, but for now
it's handy as a workaround.
More information about the Digitalmars-d-learn
mailing list