d无法构建uda
import std.traits: getSymbolsByUDA;
struct MyUDA
{
}
class A
{
@MyUDA int a;
}
class B : A
{
@MyUDA int b;
}
void main()
{
alias G = getSymbolsByUDA!(B, MyUDA);
}
如何解决这个问题?需要在父类和子类中使用相同的UDA.
如果只用语言,而不用有问题的包装器,则可以:
struct MyUDA
{
}
class A
{
@MyUDA int a;
}
class B : A
{
@MyUDA int b;
}
void main()
{
foreach(memberName; __traits(allMembers, B))
foreach(attr; __traits(getAttributes, __traits(getMember, B, memberName)))
static if(is(attr == MyUDA))
pragma(msg, memberName); // a, b
}
弄个函数,包装起.
注意,定义了@MyUDA(args)后,是is(typeof(attr) == MyUDA).
很好,创建的模板更少了.
浙公网安备 33010602011771号