Pointer to method C++ style

Steven Schveighoffer schveiguy at yahoo.com
Thu Jul 23 08:54:40 PDT 2009


On Wed, 22 Jul 2009 23:47:30 -0400, Sergey Gromov <snake.scaly at gmail.com>  
wrote:

> Is there a way to declare and statically initialize some sort of pointer
> to method, and later call it for an actual object instance?

I don't know why the "non constant expression error" happens, but  
constructing a delegate from function pointers is pretty simple:

import tango.io.Stdout;

struct Method
{
     char[] name;
     void function() method;
}

class Component
{
     void method1() {Stdout("method1").newline;}
     void method2() {Stdout("method2").newline;}


     // this works, but not sure why I couldn't initialize via a simple  
array assign...
     static Method[] LOOKUP_TABLE;
     static this()
     {
         LOOKUP_TABLE = new Method[2];
         LOOKUP_TABLE[0] = Method("method1", &Component.method1);
         LOOKUP_TABLE[1] = Method("method2", &Component.method2);
     }

     void call(int i)
     {
         // construct a delegate to call
         void delegate() dg;
         dg.ptr = cast(void*)this;
         dg.funcptr = LOOKUP_TABLE[i].method;
         // call the delegate
         dg();
     }
}

void main()
{
     Component a = new Component;
     a.call(0);
     a.call(1);
}

-------
outputs:

method1
method2

-Steve


More information about the Digitalmars-d-learn mailing list