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