d插件构造器

import std.array, std.exception, std.stdio;

mixin template RealizeException() {
    this(string msg, string file = __FILE__, size_t line = __LINE__) {
        super(msg, file, line);
    }
}//插件构造器.

class WrongUsage : Exception {
    mixin RealizeException;

    this(string[] messages, string file = __FILE__, size_t line = __LINE__) {
        auto msg = std.array.join(messages, "\n");
        super(msg, file, line);
    }
}

void main() {
    throw new WrongUsage("Error message.");
}

不工作,替换为真实,工作.
链接

类似这样:

mixin template methodMix()
{
    void foo(int n) { }
}

mixin template operatorMix()
{
    void opBinary(string op)(int n) { }
}

mixin template ctorMix()
{
    this(int n) { }
}

struct MethodTest
{
    mixin methodMix mix;

    alias foo = mix.foo;

    void foo(string s) { }
}

struct OperatorTest
{
    mixin operatorMix mix;
    alias opBinary = mix.opBinary;
    void opBinary(string op)(string s) { } // [1]
}

struct CtorTest
{
    mixin ctorMix mix;

    //alias this = mix.this;//行不行?

    this(string s) { }
}

void main()
{
    MethodTest mt;
    mt.foo(3);

    OperatorTest ot;
    ot + 3;

    auto ct = CtorTest(3); // [2]
}

如果按正确顺序,你可这样:

alias __ctor = mixin_thing.__ctor;
posted @   zjh6  阅读(15)  评论(0编辑  收藏  举报  
努力加载评论中...
点击右上角即可分享
微信分享提示