struct - D 函数文字不能是类成员

标签 struct d mixins

在尝试 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/

相关文章:

c - 使用 C 中的结构按姓名和年级对学生列表进行排序

templates - D:显示给定类型是否具有可比性的模板约束

d - 有D的包裹管理员吗?

python - django-braces 访问 mxin 每个 mixin 不同的 login_url 重定向

java - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException - jackson 图书馆

c++ - 没有完全理解这部分代码

c++ - 匿名 union 和普通 union

c - 此函数是否返回与其参数相同的指针?

memory - D/Tango 中的 malloc 和 free 不释放内存?

r - 是否有可能使用Mixins在Raku中复制R的 'named vectors'概念的简便方法?