take symbol as parameter
Marc
jckj33 at gmail.com
Mon Jan 1 02:00:05 UTC 2018
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
More information about the Digitalmars-d-learn
mailing list