const confusion

Witold Baryluk baryluk at smp.if.uj.edu.pl
Mon Jun 1 13:01:04 PDT 2009


Dnia 2009-05-31, nie o godzinie 15:36 -0400, Jarrett Billingsley pisze:
> On Sun, May 31, 2009 at 3:26 PM, Witold Baryluk
> <baryluk at smp.if.uj.edu.pl> wrote:
> >
> > Horrible.
> >
> > How to ensure constness of data, and still have possibility of changing references of local variables?
> 
> Rebindable.
> 
> http://www.digitalmars.com/d/2.0/phobos/std_typecons.html#Rebindable

Thanks. I was already thinking about implementing something like this.
It is very thin, and probably doesn't eat even single byte more than
original reference.

So generally we need to cheat: union with const and non-const version +
opAssign/opDot, and some hidden casts. If everybody is doing this, why
not.

Only one problem is that i need to make some wrappers for it:

alias Rebindable!(C) CC;


first try:

auto c1 = CC(new C(1));
auto c2 = CC(new C(2, c1)); // oops doesn't work
c2 = c2.b();

second try:

auto c1 = CC(new C(1));
auto c2 = CC(new C(2, c1.opDot())); // ok, works
c2 = c2.b();


define some function on original data:

int something(in C c) {
	return c.a;
}

something(c2); // oops, doesn't work

something(c2.opDot()); // ok, works



So generally now i need to overload all my functions to support also
Rebindable!(C), where I will unwrap object and call original function?
The same with constructors.

Can't be this done more simpler?

As I remember there was something like opCast (for explicit casts)?
Maybe Rebindable should have it casting to original type (with const)?





More information about the Digitalmars-d-learn mailing list