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 @ 2022-01-19 16:10  zjh6  阅读(21)  评论(0)    收藏  举报  来源