Overzealous immutable and classes
    bearophile 
    bearophileHUGS at lycos.com
       
    Thu Jul 15 19:43:43 PDT 2010
    
    
  
Jonathan M Davis:
> It's not terribly pretty, but apparently no one could come up with a 
> satistfactory way of doing it in the language itself given the syntax for 
> references. So, Rebindable!(T) is the solution.
A helper function can help:
import std.stdio, std.typecons, std.traits;
template isImmutable(T) {
    // I don't know if this works well in all cases
    const bool isImmutable = is(const(T) == T) || is(immutable(T) == T);
}
Rebindable!T rebindable(T)(T obj)
  if ((is(T == class) || is(T == interface) || isArray!T) && isImmutable!T) {
    return Rebindable!T(obj);
}
class Foo { int x, y; }
void main() {
    auto a = rebindable(new immutable(Foo(1, 2)));
    assert(a.sizeof == 4);
    a = new immutable(Foo(3, 4));
}
A template like isImmutable can be useful in Phobos...
Bye,
bearophile
    
    
More information about the Digitalmars-d-learn
mailing list