d包装d的特征

包装器:

struct Wrapper(alias sym)
{
    import std.format: format;

    template opDispatch(string name, Args...)
    //非DRY,可能有更好方法.
    if (__traits(compiles, mixin(`__traits(%s, sym, Args)`.format(name))))
    {
        enum opDispatch = mixin(`__traits(%s, sym, Args)`.format(name));
    }
}

void main()
{
	import std.stdio;
    writeln(Wrapper!(std).isPackage);
}

现在试试:

    writeln(Wrapper!("hello" + 1).compiles);
//这样
    struct S { int x; }
    int n = 123;
    writeln(Wrapper!(S(n)).getMember!"x");
//或这样:
    struct S { in x, y; }
    writeln(Wrapper!S.allMembers);
posted @   zjh6  阅读(12)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示