Sto scrivendo un tipo Matrix , e vorrei il seguente codice per definire una matrice di 2,2 in%, mettere il suo primo elemento a 3 e lanciare un'eccezione al raggiungimento della terza riga:
Matrix<int> a(2,2);
a[0][0] = 3;
int b = a[10][28];
Per questo, ho bisogno di sovraccaricare " operator[][] ". Lasciatemi spiegare ulteriormente:
- La mia matrice è definita come un modello con tipo di parametro
Te memorizza i suoi elementi in un array bidimensionale definito comeT** content. - Il mio punto di sovraccarico "
operator[][]" è di evitare una violazione di accesso e generare un'eccezione che può essere gestita in seguito (una violazione di accesso è not un'eccezione). - Sovraccaricare
operator[]una volta mi avrebbe permesso di usarea[0]ea[0]restituirebbe un tipoT*. - Per sovraccaricare il "
operator[][]" diMatrix, in realtà ho bisogno di sovraccaricare iloperator[]del mio sopramenzionatoT*di tipo restituito. - Poiché
T*è un array, il suooperator[]è già definito e funziona bene, quindi non c'è motivo di cambiarlo. - Anche se l'ho fatto, non potrei fare nulla di rilevante per il mio punto perché è al di fuori della classe
Matrix.
Come posso risolvere questo problema?
Potrei fare il primo sovraccarico operator[] restituire un nuovo oggetto MatrixRow con cui posso lavorare ulteriormente, ma non è una soluzione piuttosto pesante?