このコードは、getA!B() 呼び出しの 2 番目の単体テストで失敗します。エラーは次のとおりです。「タイプ「文字列」の「値」には「これ」が必要です」
質問は。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 == "");
}