Thread overview | ||||||
---|---|---|---|---|---|---|
|
January 10, 2016 [Dlang] Delegate Syntax Question | ||||
---|---|---|---|---|
| ||||
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 Re: [Dlang] Delegate Syntax Question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jack | 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 Re: [Dlang] Delegate Syntax Question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jack | 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 Re: [Dlang] Delegate Syntax Question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jack | 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.
|
Copyright © 1999-2021 by the D Language Foundation