struct M{
T opIndex(uint i){ ... }
}
, который дает мне это:Как реализовать `opIndex` в более высоких измерениях?
m[i]
но что, если я хочу это в два измерения, так что я мог бы сделать:
m[i][j]
есть в любом случае сделать это?
struct M{
T opIndex(uint i){ ... }
}
, который дает мне это:Как реализовать `opIndex` в более высоких измерениях?
m[i]
но что, если я хочу это в два измерения, так что я мог бы сделать:
m[i][j]
есть в любом случае сделать это?
Да, вы можете использовать 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);
}
хехе, хороший! Я делал 'opIndex (uint i, uint j) {return opIndex (...); } ', который не работал. Благодарю. – Arlen