Thread overview
[Dlang] Delegate Syntax Question
Jan 10, 2016
Jack
Jan 10, 2016
anonymous
Jan 10, 2016
Gary Willoughby
Jan 13, 2016
Jack
January 10, 2016
Hello. So I was trying to pass a delegate as an argument in a function and was wondering if I'm writing the correct code for it.

You see my code is :


//////////////////////////////////////////


class Foo()
{
 void bar()
 {
 writeln("Hello World");
 }
}

class Bar()
{

void delegate() action;

  void setAction(void delegate() dele)
  {
   action = dele;
  }

}

void main()
{
Foo foo = new Foo();
Bar bar = new Bar();
bar.setAction(&foo.bar);
bar.action();
}

/////////////////////////////////////////

Is this correct? Because I've been having trouble calling the delegate when passing the method and I read many documentation concerning function and delegates. I'm just confused. (Disclaimer: My code's pattern is the same as above but it's not really my exact code)
January 10, 2016
On 10.01.2016 15:32, Jack wrote:
> //////////////////////////////////////////
>
>
> class Foo()

Those parentheses make this a (zero parameter) class template. I suppose you just want a plain class. Drop them then.

> {
>   void bar()
>   {
>   writeln("Hello World");
>   }
> }
>
> class Bar()

ditto

> {
>
> void delegate() action;
>
>    void setAction(void delegate() dele)
>    {
>     action = dele;
>    }
>
> }
>
> void main()
> {
> Foo foo = new Foo();
> Bar bar = new Bar();
> bar.setAction(&foo.bar);
> bar.action();
> }
>
> /////////////////////////////////////////
>
> Is this correct? Because I've been having trouble calling the delegate
> when passing the method and I read many documentation concerning
> function and delegates. I'm just confused. (Disclaimer: My code's
> pattern is the same as above but it's not really my exact code)

Aside from the mentioned parentheses (and a missing import), everything's correct.
January 10, 2016
On Sunday, 10 January 2016 at 14:32:02 UTC, Jack wrote:
> ...

Just to make your code a little more clear, try using aliases when defining delegate parameters. Like this:

alias Action = void delegate();

Then in your code you use the alias, like this:

class Bar()
{
    private Action _action;

    void setAction(Action d)
    {
        this._action = d;
    }
}

IMHO it makes everything more readable and you only have one definition of the delegate signature.
January 13, 2016
On Sunday, 10 January 2016 at 14:32:02 UTC, Jack wrote:
> Hello. So I was trying to pass a delegate as an argument in a function and was wondering if I'm writing the correct code for it.
>
> You see my code is :
>
>
> //////////////////////////////////////////
>
>
> class Foo()
> {
>  void bar()
>  {
>  writeln("Hello World");
>  }
> }
>
> class Bar()
> {
>
> void delegate() action;
>
>   void setAction(void delegate() dele)
>   {
>    action = dele;
>   }
>
> }
>
> void main()
> {
> Foo foo = new Foo();
> Bar bar = new Bar();
> bar.setAction(&foo.bar);
> bar.action();
> }
>
> /////////////////////////////////////////
>
> Is this correct? Because I've been having trouble calling the delegate when passing the method and I read many documentation concerning function and delegates. I'm just confused. (Disclaimer: My code's pattern is the same as above but it's not really my exact code)

Replying to my self because I don't know how I can reply to two posts at once.

Thank you for helping. I've had a problem on handling delegates in my code so I was not sure if it was working. I'll post here if I can't find the solution.