digitalmars.D.learn - access enclosing type from shared static this()
- =?UTF-8?B?IsOYaXZpbmQi?= (25/25) Sep 19 2012 I want to access the type of the enclosing struct in in a shared
- David (2/5) Sep 19 2012 typeof(this).stringof
- Timon Gehr (8/30) Sep 19 2012 use typeof(this), eg:
- =?UTF-8?B?IsOYaXZpbmQi?= (3/9) Sep 19 2012 Thanks a lot both of you. The code below worked. I did not expect
I want to access the type of the enclosing struct in in a shared static initializer.. How do I do that? The following code will not compile: mixin template MsgMixin(T ...) { static string getName(this M)() { return M.stringof; } shared static this() { import std.stdio; writeln("register " ~ getName()); } } struct MsgTestMsg { mixin MsgMixin!(); } I get the following error messages: src/main.d(40): Error: template main.MsgTestMsg.MsgMixin!().getName does not match any function template declaration src/main.d(40): Error: template main.MsgTestMsg.MsgMixin!().getName(this M) cannot deduce template function from argument types !()() If not possible, just getting the name of the enclosing struct would help a lot! -Øivind
Sep 19 2012
If not possible, just getting the name of the enclosing struct would help a lot! -Øivindtypeof(this).stringof This should do it
Sep 19 2012
On 09/19/2012 09:37 PM, "Øivind" wrote:I want to access the type of the enclosing struct in in a shared static initializer.. How do I do that? The following code will not compile: mixin template MsgMixin(T ...) { static string getName(this M)() { return M.stringof; } shared static this() { import std.stdio; writeln("register " ~ getName()); } } struct MsgTestMsg { mixin MsgMixin!(); } I get the following error messages: src/main.d(40): Error: template main.MsgTestMsg.MsgMixin!().getName does not match any function template declaration src/main.d(40): Error: template main.MsgTestMsg.MsgMixin!().getName(this M) cannot deduce template function from argument types !()() If not possible, just getting the name of the enclosing struct would help a lot! -Øivinduse typeof(this), eg: mixin template MsgMixin(T ...) { shared static this() { import std.stdio; writeln("register " ~ typeof(this).stringof); } }
Sep 19 2012
Thanks a lot both of you. The code below worked. I did not expect 'this' to be available in the static function, but of course the type of 'this' is available.mixin template MsgMixin(T ...) { shared static this() { import std.stdio; writeln("register " ~ typeof(this).stringof); } }
Sep 19 2012