Una domanda più fondamentale è se definire il operator()
(della classe) per questo scopo o meno. Ahimè, questa decisione è già stata presa dall'autore (s) della classe matrix, quindi dovremmo considerare il suo utilizzo compatibile con l'intento dell'autore (i).
In effetti, questo è ciò che la maggior parte delle librerie a matrice (o array multidimensionale) sceglierebbero di implementare in C ++.
Si noti che la prima versione del codice potrebbe non essere a prova di futuro. Non c'è alcuna garanzia che Matrix.matrix
esista nelle versioni future della libreria, o che Matrix matrix; mat.matrix[k][j]
continui a essere un'espressione valida a causa di future modifiche alle librerie.
Possibili motivi per cui potrebbero verificarsi tali cambiamenti futuri:
- La libreria di matrice utilizzava dimensioni di matrice costanti in fase di compilazione (parametrizzazione di modelli), ma è stata successivamente aggiornata per supportare le dimensioni della matrice di runtime.
- Questo significa che internamente non sta più dichiarando
matrix
come T matrix[M][N];
.
- La libreria di matrici utilizzata per mantenere una serie di puntatori all'inizio di ogni riga, ma poi ha deciso di eliminarla per risparmiare un po 'di memoria.
- Ciò significa internamente che non sta più dichiarando
matrix
come T** matrix;
, quindi il campo potrebbe essere stato rimosso oppure non è possibile utilizzare matrix[row]
per ottenere il puntatore iniziale su una riga specifica.
- La libreria di matrici può aver implementato la cancellazione di tipo, quindi la classe non conosce più il tipo di
T
in fase di compilazione; invece, contiene solo un puntatore non tipizzato all'inizio del blocco di memoria allocato, come in void* matrix;
o uchar* matrix;
, dove uchar
non ha alcuna relazione con il tipo numerico della matrice.
Tuttavia, se la libreria di matrix è sotto il tuo pieno controllo, vale a dire: l'hai scritta, nessun altro può cambiarla, e tu hai la sola discrezione su quali cambiamenti futuri farti, quindi "a prova di futuro" il problema non si applica a te.