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