Thread overview | |||||
---|---|---|---|---|---|
|
October 23, 2019 Error: need this for method of type | ||||
---|---|---|---|---|
| ||||
Hi! Consider this simplified program: ``` import std.stdio; struct X { void method(int x) { writeln("method called"); } } void main() { X x; foreach (member; __traits(allMembers, X)) { alias method = __traits(getMember, x, member); method(1); } } ``` Output: test.d(15): Error: need this for method of type void(int x) This one as well: ``` import std.stdio; struct X { void method(int x) { writeln("method(int) called"); } } struct Y { void method(ref X x) { foreach (member; __traits(allMembers, X)) { alias method = __traits(getMember, x, member); method(1); } } } void main() { Y y; X x; y.method(x); } ``` Output: ```test.d(14): Error: this for method needs to be type X not type Y``` This is a bug, right? If not, why, and how can I get around it and call `method`? |
October 23, 2019 Re: Error: need this for method of type | ||||
---|---|---|---|---|
| ||||
Posted in reply to Márcio Martins | On Wednesday, 23 October 2019 at 11:40:09 UTC, Márcio Martins wrote:
> This is a bug, right? If not, why, and how can I get around it and call `method`?
An alias refers just to a symbol, in this case a member function of struct X.
The fact that you polled it on instance 'x' is not something an alias keeps track of.
You can change `method(1)` into `x.method(1)` and it should work.
|
October 23, 2019 Re: Error: need this for method of type | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis | On Wednesday, 23 October 2019 at 11:48:29 UTC, Dennis wrote:
> You can change `method(1)` into `x.method(1)` and it should work.
Wait, but that's only because the local alias and member function have the same name 'method'.
I think you just have to keep the method name as a string instead of an alias and use ` __traits(getMember, x, member)(3);` the moment you want to call it.
|
Copyright © 1999-2021 by the D Language Foundation