我有一个班级成员列表:__traits(allMembers, SomeType)
。我对列表中的某个元素__traits(isTemplate, member)
使用特征member
。考虑特征的结果是真的。这是否意味着该成员是一个功能?或者allMembers
答案 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
结构名称空间中。