2011-12-20 2 views

ответ

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); 
} 
+0

хехе, хороший! Я делал 'opIndex (uint i, uint j) {return opIndex (...); } ', который не работал. Благодарю. – Arlen

Смежные вопросы