此代码在 getA!B() 调用的第二个单元测试中失败。错误是:“对于'string'类型的'value'需要'this'”
问题是。无论 UDA 是类型还是 opCall,如何让 getA 始终返回 A?
static A opCall(T...)(T args) {
A ret;
ret.value = args[0];
return ret;
}
string value;
}
@A struct B {
}
@A("hello") struct C {
}
A getA(T)() {
foreach(it; __traits(getAttributes, T)) {
if(is(typeof(it) == A)) {
A ret;
ret.value = it.value;
return ret;
}
}
assert(false);
}
unittest {
A a = getA!C();
assert(a.value == "hello");
}
unittest {
A a = getA!B();
assert(a.value == "");
}