get type name from current class at compile time?

Jack jckj33 at gmail.com
Sun Apr 25 02:26:00 UTC 2021


On Sunday, 25 April 2021 at 02:02:47 UTC, Ali Çehreli wrote:
> On 4/24/21 6:50 PM, Jack wrote:
>> I'd like to output `K` and get this identifier at compile time.
>
> This is solved by the "this template parameter":
>
> import std.stdio;
>
> class A {
>   void showMyName(this T)() {
>     writefln("name = [%s]", __traits(identifier, T));
>   }
> }
>
> class K : A { }
>
> void main() {
>   new K().showMyName();
> }
>
> Ali

doesn't this work when called from member in a derived class?

```d

class A
{
	void doSomething(this T)()
	{
		writefln("name = [%s]", __traits(identifier, T));
	}
}

class K : A
{
	void baa()
	{
		doSomething();
	}
}
```

result in the error:

Error: template `foo.A.doSomething` cannot deduce function from 
argument types `!()()`,


More information about the Digitalmars-d-learn mailing list