假设我有一个D模板结构:

struct Foo(alias pred) {}

我想写一个模板来反射Reflection 什么是pred:
alias Foo!"a < b" FooLess;
static assert(introspectPred!(FooLess) == "a < b");

有没有简单的方法可以做到这一点?如果是这样,如何实现introspectPred

最佳答案

我唯一想到的就是在Foo类型内定义一个枚举,并进行一些基本的自省。例如。:

struct Foo(alias pred)
{
    enum string _pred = pred;
}

alias Foo!"a < b" FooLess;
static assert(introspectPred!(FooLess) == "a < b");

template introspectPred(T)
{
    enum string introspectPred = getMember!(T, "_pred");
}

template getMember(T, string member)
{
    static if (__traits(hasMember, T, member))
    {
        enum getMember = mixin("T." ~ member);
    }
    else
        enum getMember = "";
}

void main()
{

}

09-06 22:46