对于 D 中的非函数 class 成员,"isTemplate" return 可以吗?
Can "isTemplate" return true for a non-function class member in D?
我有一份 class 成员的列表:__traits(allMembers, SomeType)
。我对列表中的某些元素 member
使用特征 __traits(isTemplate, member)
。考虑特征的结果是真的。这是否意味着成员是一个函数?或者其他东西可以是 allMembers
列表中的模板吗?
不是说它是一个函数,而是说它是一个模板。该模板可以是模板函数,也可以是模板本身。
一个例子:
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
结构命名空间中。
我有一份 class 成员的列表:__traits(allMembers, SomeType)
。我对列表中的某些元素 member
使用特征 __traits(isTemplate, member)
。考虑特征的结果是真的。这是否意味着成员是一个函数?或者其他东西可以是 allMembers
列表中的模板吗?
不是说它是一个函数,而是说它是一个模板。该模板可以是模板函数,也可以是模板本身。
一个例子:
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
结构命名空间中。