Re: take symbol as parameter

2017-12-31 Thread Marc via Digitalmars-d-learn

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

2017-12-31 Thread Marc via Digitalmars-d-learn

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

2017-12-31 Thread Marc via Digitalmars-d-learn

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

2017-12-30 Thread rjframe via Digitalmars-d-learn
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

2017-12-30 Thread Marc via Digitalmars-d-learn

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)