Да, вы можете использовать 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);
}