|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2007
Messaggi: 292
|
[C++] Ridefinizione operatori
Stavo leggendo la documentazione della Blitz++ library quando leggo questo pezzo di codice:
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;
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? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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 ? |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2007
Messaggi: 292
|
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à. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Prova un po' a vedere se c'è un operatore = un po' strano...
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Guarda in ListInit.h
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: May 2007
Messaggi: 292
|
Ah, ma hai trovato il punto in cui si svela l'arcano (il maledetto operatore virgola stava nascosto li dentro
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 :-) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:32.



















