PDA

View Full Version : [C++] Ridefinizione operatori


Zero-Giulio
04-06-2010, 13:46
Stavo leggendo la documentazione della Blitz++ library quando leggo questo pezzo di codice:


int main()
{

Array<float,2> A(3,3), B(3,3), C(3,3);

A = 1, 0, 0,
2, 2, 2,
1, 0, 0;

B = 0, 0, 7,
0, 8, 0,
9, 9, 9;

C = A + B;

cout << "A = " << A << endl
<< "B = " << B << endl
<< "C = " << C << endl;


che praticamente inizializza e somma due matrici.

Avete idea di che operatori io debba ridefinire per ottenere un costruttore della classe array tipo riportato sopra???

Voglio dire, come faccio a trattare una lista di numeri separati dalla virgola subito dopo l'operatore di uguaglianza?
La prima idea che mi viene in mente è quella di ridefinire l'operatore di virgola, e fare in modo che aggiunga un elemento in fondo all'array, e poi far restituire all'operatore = il riferimento all'array (che sarebbe cmq il suo comportamento di default).
Ma non sono sicuro funzioni. E sopratutto non sono sicuro sia il modo più lineare ed elegante per ottenere quello che mi serve.

Voi avete qualche idea?

cionci
04-06-2010, 14:13
Molto interessante, non ci avevo mai pensato ad una soluzione "esotica" come quella. Comunque credo che sia come quella che dici tu.
L'operatore virgola sarà una cosa di questo tipo:

template <typename T>
Array<T, 1> & operator,(Array<T, 1> &a, T data);

Però sinceramente non so come fa il primo operatore a trovare la corrispondenza con la funzione...
Hai provato a guardare i sorgenti ?

Zero-Giulio
04-06-2010, 14:51
Si, ho letto tutto l'array.h (che dovrebbe essere l'unico include necessario al programma che ho allegato), ma non sono riuscito a chiarirmi le idee.

Intanto, non ho trovato l'operatore virgola ridefinito (han ridefinito tutti gli operatori possibili e immaginabili, ma la virgola no).

Di costruttori ce ne sono una trentina, alcuni ricevono come argomenti cose strane. Dovrei entrare più nel dettaglio (nel .h ci sono solo le definizioni).

Se trovo più tempo provo a entrare più in profondità.

cionci
04-06-2010, 14:53
Prova un po' a vedere se c'è un operatore = un po' strano...

cionci
04-06-2010, 14:59
Guarda in ListInit.h ;)

Zero-Giulio
04-06-2010, 15:27
Ah, ma hai trovato il punto in cui si svela l'arcano (il maledetto operatore virgola stava nascosto li dentro :D).

Complimenti, e grazie per l'aiuto :-)
[Io adesso sono a lavoro e quindi avevo rimandato lo studio della libreria a stasera].

Ottimo. Ora lo implemento nel mio codice.
Alla prossima :-)