Can" isTemplate"对于D中的非函数类成员,返回true?

时间:2016-01-05 08:58:30

标签: d introspection

我有一个班级成员列表:__traits(allMembers, SomeType)。我对列表中的某个元素__traits(isTemplate, member)使用特征member。考虑特征的结果是真的。这是否意味着该成员是一个功能?或者allMembers

列表中的其他内容可以是模板

1 个答案:

答案 0 :(得分:3)

这并不意味着它是一个功能,它意味着它是一个模板。该模板可以是模板化函数,也可以是模板本身。

一个例子:

import std.stdio;
struct Test{
    void fee(T)(){}
    template fi(T){
        void fo(){} // wont get tested...
    }
    void fum(){}
} 

void main(){
    foreach(member; __traits(allMembers, Test)){
        writefln("%s isTemplate: %s", member, __traits(isTemplate, mixin("Test."~member)));
    }
}

输出:

fee isTemplate: true
fi isTemplate: true
fum isTemplate: false

可能绊倒你的是你缺少mixin。 如果mixin("Test."~member)不存在,则isTemplate将测试fi是模板,fo还是fum,并且它们不是模板,因为它们不存在于那个名称空间。

它们仅存在于Test结构名称空间中。