Member function address
David Nadlinger
david.nadlinger at gmail.com
Sat Nov 21 10:30:17 PST 2009
In a wrapper generator I am writing, I need to check if some member function
foo() has been overridden in a subclass.
Thanks to the help of maxter at #d, I currently have this for D1:
template addressOf( alias fn ) {
const addressOf = &fn;
}
class A {
void foo() {}
final void bar() {
auto dg = &foo;
if ( addressOf!( foo ) == dg.funcptr ) {
Stdout( "not overridden" ).newline;
} else {
Stdout( "overridden" ).newline;
}
}
}
class B : A {
override void foo() {}
}
void main() {
A a = new A();
a.bar;
A b = new B();
b.bar;
}
Although the code works fine with DMD, LDC complains that »this« is needed
to evaluate &foo in addressOf. Is this a bug in LDC or in fact illegal code
which DMD happens to erroneously accept? Are there any less hackish ways to
perform the check?
Thanks,
klickverbot
More information about the Digitalmars-d-learn
mailing list