在尝试 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());
}
编译失败
function literals cannot be class members
希望这对于其他人来说很容易解决。
注意: 我尝试过使用 writeln() 进行调试。
writeln(iota(4).map!(i => ("T* "~"xyzw"[i]~";")).join());
上面的代码打印: T* x;T* y;T* z;T* w;
编辑: 我自己的答案不如 Peter Alexander 的答案,所以我把它删掉了。
最佳答案
实际上,问题似乎是 class
/struct
内的 mixin
表达式中存在 lambda 函数。
这有效:
mixin( iota(n).map!(q{"T " ~ "xyzw"[a] ~ ";"}).join() );
您的原始表达式在类之外也可以正常工作(例如,在 main()
内声明局部变量)。尝试在编译时运行代码没有问题,这只是一个奇怪的 DMD 前端实现限制。
有a bug已经针对此问题提出了申请。
关于struct - D 函数文字不能是类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18026684/