对于 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 是模板,还是 fofum,并且它们不是模板,因为它们不存在于那个命名空间。

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