Re: take symbol as parameter
On Saturday, 30 December 2017 at 23:30:02 UTC, rjframe wrote: On Sat, 30 Dec 2017 13:07:49 +, Marc wrote: how do I take a symbol as parameter? for example: template nameof(alias S) { import std.array : split; enum nameof = S.stringof.split(".")[$-1]; } Works fine for say a enum member such nameof!(myEnum.X) but this: struct S { int v; } S s; writefln(nameof!(s.v)); // should return "v" return the following error: Error: template instance nameof!(v) cannot use local 'v' as parameter to > non-global template nameof(alias S) You can use the name of the struct rather than the instance. writefln(nameof!(S.v)); How do I make it work when the symbol is defiend as following: class C { int a() { return 0; }} call to nameof!(C.a) give compiler error: Error: need 'this' for 'a' of type 'int()' template instance foo.nameof!(a) error instantiating
Re: take symbol as parameter
On Sunday, 31 December 2017 at 22:50:12 UTC, Marc wrote: On Saturday, 30 December 2017 at 23:30:02 UTC, rjframe wrote: On Sat, 30 Dec 2017 13:07:49 +, Marc wrote: how do I take a symbol as parameter? for example: [...] Works fine for say a enum member such nameof!(myEnum.X) but this: [...] return the following error: [...] You can use the name of the struct rather than the instance. writefln(nameof!(S.v)); it doesn't work for me: Error: template instance nameof!(v) cannot use local 'v' as parameter to non-global template nameof(alias S) Put it at global scope. Worked fine.
Re: take symbol as parameter
On Saturday, 30 December 2017 at 23:30:02 UTC, rjframe wrote: On Sat, 30 Dec 2017 13:07:49 +, Marc wrote: how do I take a symbol as parameter? for example: template nameof(alias S) { import std.array : split; enum nameof = S.stringof.split(".")[$-1]; } Works fine for say a enum member such nameof!(myEnum.X) but this: struct S { int v; } S s; writefln(nameof!(s.v)); // should return "v" return the following error: Error: template instance nameof!(v) cannot use local 'v' as parameter to > non-global template nameof(alias S) You can use the name of the struct rather than the instance. writefln(nameof!(S.v)); it doesn't work for me: Error: template instance nameof!(v) cannot use local 'v' as parameter to non-global template nameof(alias S)
Re: take symbol as parameter
On Sat, 30 Dec 2017 13:07:49 +, Marc wrote: > how do I take a symbol as parameter? > > for example: > >> template nameof(alias S) { >> import std.array : split; >> enum nameof = S.stringof.split(".")[$-1]; >>} > > Works fine for say a enum member such nameof!(myEnum.X) but this: > >> struct S { int v; } >> S s; >> writefln(nameof!(s.v)); // should return "v" > > return the following error: > >> Error: template instance nameof!(v) cannot use local 'v' as parameter >> to > non-global template nameof(alias S) You can use the name of the struct rather than the instance. writefln(nameof!(S.v));
take symbol as parameter
how do I take a symbol as parameter? for example: template nameof(alias S) { import std.array : split; enum nameof = S.stringof.split(".")[$-1]; } Works fine for say a enum member such nameof!(myEnum.X) but this: struct S { int v; } S s; writefln(nameof!(s.v)); // should return "v" return the following error: Error: template instance nameof!(v) cannot use local 'v' as parameter to > non-global template nameof(alias S)