digitalmars.D.learn - take symbol as parameter
- Marc (4/13) Dec 30 2017 Works fine for say a enum member such nameof!(myEnum.X) but this:
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)
Dec 30 2017
On Sat, 30 Dec 2017 13:07:49 +0000, Marc wrote:how do I take a symbol as parameter? for example:You can use the name of the struct rather than the instance. writefln(nameof!(S.v));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)
Dec 30 2017
On Saturday, 30 December 2017 at 23:30:02 UTC, rjframe wrote:On Sat, 30 Dec 2017 13:07:49 +0000, Marc wrote:it doesn't work for me:how do I take a symbol as parameter? for example:You can use the name of the struct rather than the instance. writefln(nameof!(S.v));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)Error: template instance nameof!(v) cannot use local 'v' as parameter to non-global template nameof(alias S)
Dec 31 2017
On Sunday, 31 December 2017 at 22:50:12 UTC, Marc wrote:On Saturday, 30 December 2017 at 23:30:02 UTC, rjframe wrote:Put it at global scope. Worked fine.On Sat, 30 Dec 2017 13:07:49 +0000, Marc wrote:it doesn't work for me:how do I take a symbol as parameter? for example:You can use the name of the struct rather than the instance. writefln(nameof!(S.v));[...]Works fine for say a enum member such nameof!(myEnum.X) but this:[...]return the following error:[...]Error: template instance nameof!(v) cannot use local 'v' as parameter to non-global template nameof(alias S)
Dec 31 2017
On Saturday, 30 December 2017 at 23:30:02 UTC, rjframe wrote:On Sat, 30 Dec 2017 13:07:49 +0000, Marc wrote:How do I make it work when the symbol is defiend as following:how do I take a symbol as parameter? for example:You can use the name of the struct rather than the instance. writefln(nameof!(S.v));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)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
Dec 31 2017