2011-12-20 41 views

回答

8

是的,您可以使用C++方式來返回一個臨時對象(struct最好在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); 
} 
+0

呵呵,太好了!我在做'opIndex(uint i,uint j){return opIndex(...); }'這不起作用。謝謝。 – Arlen 2011-12-20 05:07:53