假设我有一个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()
{
}