On Fri, 01 Jun 2012 08:32:02 -0400, d coder <dlang.co...@gmail.com> wrote:

Hello All

Particularly I would like to know if it is possible at all in D to invoke a class method transferred to a scope outside the class as an alias argument.

Is it possible? Yes. But not easy. I won't go into the details, but suffice to say, you must reconstruct a delegate and then call it.

D does not have "pointers to members" like C++ does. So when you alias f.foo you are actually aliasing the function F.foo (without the context pointer, and without a parameter to be able to place it).

However, there is another way -- use delegates:

void main() {
  Foo f = new Foo();
  auto dg = &f.foo; // need to make a symbol so it can be aliased
  callfoo!(dg)();
}

Sorry if this is disappointing, D is not as low-level in this area. But if you are willing to always pair a member function with its context pointer, delegates are much simpler and more useful than pointers to members:

void main() {
   Foo f = new Foo;
   auto dg = &f.foo;
   dg();
}

-Steve

Reply via email to