Thread overview |
---|
December 30, 2017 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) |
December 30, 2017 Re: take symbol as parameter | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marc | On Sat, 30 Dec 2017 13:07:49 +0000, 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));
|
December 31, 2017 Re: take symbol as parameter | ||||
---|---|---|---|---|
| ||||
Posted in reply to rjframe | 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 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) |
December 31, 2017 Re: take symbol as parameter | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marc | 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 +0000, 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.
|
January 01, 2018 Re: take symbol as parameter | ||||
---|---|---|---|---|
| ||||
Posted in reply to rjframe | 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 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 |
Copyright © 1999-2021 by the D Language Foundation