On 2012-06-01 15:25, d coder wrote:
Hello Steve, thanks for looking at this.

I see the code works when I create the delegate first and then send it
to template.  That is the way you do it here.

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


But it does not work when I put &f.foo directly as the template
argument. But it works when I say:

void main() {
   Foo f = new Foo();
   callfoo!(() {f.foo();})(f);
}

But that still does not solve my problem. In my real code, I want to
send the delegate to a template class. And I am supposed to do that as a
member of another class. So the code looks something like:

Class Bar(alias F) {
  // Call F in some function here
}

Class Foo {
   void foo();
   Bar!(() {foo();}) bar;
}

Again this does not work. Maybe I am expecting too much from D. :-) I am
somewhat aware of the issues involved here. I have seen some earlier D
threads.

But then I thought there might be a way to pass the method function
literal (foo) and separately the this pointer of Foo object and then
combine the two at the other end (inside Bar).

Regards
- Puneet


Originally you said "class method", so I was thinking like this:

class Foo
{
    static void bar ()
    {
        writeln("bar");
    }
}

void foo (alias m) ()
{
    m();
}

void main ()
{
    foo!(Foo.bar);
}

But if you actually mean "instance method" you need to use delegates and possible compose them as Steven showed.

--
/Jacob Carlborg

Reply via email to