struct M{
T opIndex(uint i){ ... }
}
che mi dà questo:Come implementare `opIndex` in dimensioni superiori?
m[i]
ma cosa succede se lo voglio in due dimensioni in modo che potessi fare:
m[i][j]
c'è comunque di fare questo?
struct M{
T opIndex(uint i){ ... }
}
che mi dà questo:Come implementare `opIndex` in dimensioni superiori?
m[i]
ma cosa succede se lo voglio in due dimensioni in modo che potessi fare:
m[i][j]
c'è comunque di fare questo?
Sì, si può fare il modo C++ di restituire un oggetto temporaneo (struct è la cosa migliore nel caso in cui D's), che ha anche un sovraccarico operatore di indice.
Ma un'idea migliore in D è di andare per la sintassi m[i, j]
:
struct S
{
uint opIndex(uint i, uint j)
{
return i + j;
}
}
void main()
{
S s;
assert(s[2, 3] == 5);
}
Se si vuole ancora utilizzare m[i][j]
, una struct nidificato ti dà qualche margine di manovra sintattico:
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);
}
hehe, simpatico! Stavo facendo 'opIndex (uint i, uint j) {return opIndex (...); } 'che non funzionava. Grazie. – Arlen