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!

-Øivind


use typeof(this), eg:

mixin template MsgMixin(T ...) {
    shared static this() {
        import std.stdio;
        writeln("register " ~ typeof(this).stringof);
    }
}

Reply via email to