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

时间:2011-12-20 04:55:27

标签: d

struct M{
 T opIndex(uint i){ ... }
}

给了我这个:

m[i]

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

m[i][j]

无论如何都要这样做?

1 个答案:

答案 0 :(得分: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);
}

如果您仍想使用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);
}