//Consider this:
import std.stdio;
void main() {
X obj = new Y;
writeln( obj._f() );
}
class Proxy {
X x;
this(X x) { this.x = x; }
string _f() { return "Proxy._f called"; }
}
class X {
auto opDispatch(string f, Args...)(Args args) {
Proxy p = new Proxy(this);
return mixin("p."~f~"(args)");
}
}
class Y : X {
string _f() { return "Y._f called"; }
}
//
Presumably the presence of obj._f()in main causes the compilation
of a function _f() in the class X, yet the function _f() in Y
that inherits it merely shadows it; the keyword override cannot
be used for this function.
opDispatch is special in that it allows for functions to be added
to a class or struct when undefined overtly but used elsewhere
but it seems those functions sadly are final.
Can anything useful be done to remedy the situation?