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  阅读(14)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示