如何选择具有UDA的给定属性名称的所有成员?

时间:2014-05-23 20:53:24

标签: d

考虑一个带委托的属性(谓词函数为std.algorithm.filter)

struct Section( alias pred ){}

这用于注释这样的字段:

struct A {
    @Section!( ( words ) =>  words[0] == '@' )
    string b;
    int c;
}

字段b由委托进行注释,如果字符串以@开始时调用

,则返回true

那么如何检索所有由@Section注释的字段?

是否可以在运行时调用带有字符串作为参数的委托,并知道它是否为真?

感谢

1 个答案:

答案 0 :(得分:2)

  

那么如何检索所有由@Section注释的字段?

首先,使用allMembers.tupleof枚举结构的所有字段。

然后,使用getAttributes枚举附加到每个字段的所有属性。检查字段中是否存在@Section

  

是否可以在运行时调用带有字符串作为参数的委托,并知道它是否为真?

您应该在Section结构中保存别名。例如:

struct Section(alias pred)
{
    alias fun = pred;
}

然后,只需引用getAttributes结果元组成员。