如何在更高维度实现`opIndex`?

Arl*_*len 7 d

struct M{
 T opIndex(uint i){ ... }
}
Run Code Online (Sandbox Code Playgroud)

这给了我这个:

m[i]
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要它在二维中,那么我可以这样做:

m[i][j]
Run Code Online (Sandbox Code Playgroud)

无论如何要做到这一点?

jA_*_*cOp 8

是的,你可以用C++的方式返回一个临时对象(结构在D的情况下是最好的),它也有一个索引操作符重载.

但是在D中更好的想法是寻求语法m[i, j]:

struct S
{
    uint opIndex(uint i, uint j)
    {
        return i + j;
    }
}

void main()
{
    S s;
    assert(s[2, 3] == 5);
}
Run Code Online (Sandbox Code Playgroud)

如果您仍想使用m[i][j],嵌套结构将为您提供一些语法余地:

struct S
{
    auto opIndex(uint i)
    {
        struct Temp
        {
            uint opIndex(uint j)
            {
                return i + j;
            }
        }

        return Temp();
    }
}

void main()
{
    S s;
    assert(s[2][3] == 5);
}
Run Code Online (Sandbox Code Playgroud)