在玩 D 的 mixin 时,我遇到了这个难题。
////////////////////////////////////////////////////////
// Proxy
////////////////////////////////////////////////////////
//What I'm aiming for
/*
struct Proxy4(T) if (isNumeric!T)
{
T* x;
T* y;
T* z;
T* w;
}
*/
//Preferred implementation
struct Proxy(T, uint n) if (2<=n && n<=4 &&
isNumeric!T)
{
//Declare pointer fields
mixin(iota(n).map!(i => ("T* "~"xyzw"[i]~";")).join());
}
这无法编译,因为
函数字面量不能是类成员
希望对于外面的人来说,这很容易解决。
注意:我尝试过使用 writeln() 进行调试。
writeln(iota(4).map!(i => ("T* "~"xyzw"[i]~";")).join());
上面的代码打印:T* x;T* y;T* z;T* w;
编辑:我自己的答案不如彼得亚历山大的答案,所以我把它编辑了。