xxxxxxxxxx
import std.stdio;
struct Foo {
int x;
void init(int value) { *setX(this) = value; }
}
class Bar {
int x;
void init(int value) { *setX(this) = value; }
}
int* setX(T)(return auto ref T t) {
static if(is(T == class)) return &t.x;
else static if(is(T == struct) && __traits(isRef, t))
return &t.x;
else static assert(0, "no impl " ~ T.stringof);
}
void main()
{
Foo foo = Foo();
foo.init(42);
Bar bar = new Bar();
bar.init(41);
typeid(foo).writeln(": ", foo.x);
typeid(bar).writeln(": ", bar.x);
auto fun = Foo();
fun.init(foo.x);
auto gun = new Bar();
gun.init(bar.x);
string eşitler_mi() {
assert(fun.x == foo.x, "değiller");
assert(gun.x == bar.x, "değiller");
return "eşitler";
}
eşitler_mi.writeln;
fun.x++;
gun.x++;
eşitler_mi.writeln;
}