www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - alias to struct method

reply Marc <jckj33 gmail.com> writes:
How can I create a alias to a struct method?

 struct S {
  string doSomething(int n) { return ""; }
 }
I'd like to do something like this (imaginary code): alias doSomething = S.doSomething; then call it by doSomething(3) I got the following error from this code:
 Error: need 'this' for 'gen' of type 'string(int n)'
So I tried create a instance:
 alias doSomething = S().doSomething;
Changes the error to:
 app.d(96): Error: function declaration without return type. 
 (Note that > constructors are always named this)
 app.d(96): Error: semicolon expected to close alias declaration
Dec 22 2017
next sibling parent =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
On 12/22/2017 09:53 AM, Marc wrote:
 How can I create a alias to a struct method?

 struct S {
  string doSomething(int n) { return ""; }
 }
I'd like to do something like this (imaginary code): alias doSomething = S.doSomething; then call it by doSomething(3)
That can't work because there is no S object to call doSomething on. One way is to use a delegate: struct S { string doSomething(int n) { return ""; } } void main() { S s; auto d = (int n) { s.doSomething(n); }; d(3); } Ali
Dec 22 2017
prev sibling parent Mengu <mengukagan gmail.com> writes:
On Friday, 22 December 2017 at 17:53:34 UTC, Marc wrote:
 How can I create a alias to a struct method?

 struct S {
  string doSomething(int n) { return ""; }
 }
I'd like to do something like this (imaginary code): alias doSomething = S.doSomething; then call it by doSomething(3) I got the following error from this code:
 Error: need 'this' for 'gen' of type 'string(int n)'
So I tried create a instance:
 alias doSomething = S().doSomething;
Changes the error to:
 app.d(96): Error: function declaration without return type. 
 (Note that > constructors are always named this)
 app.d(96): Error: semicolon expected to close alias declaration
it is also possible with getMember trait but why don't you just mark that method as static?
Dec 22 2017