PDA

Visualizza la versione completa : Funzione in una funzione


XWolverineX
23-05-2006, 18:28
Piccolo dubbio del C++
Sappiamo che permette gli overloading degli operatori.
Mettiamo caso ho una struct chiamata Mtr e ho fatto una funzione che permette di moltiplicarla ad un'altra. questa può essere usata cosi.


Mtr C;
C.x = 2;
C.y = "Salve";
//altri valori...

Mtr B;
Mtr.x = 10;
Mtr.y = "Giorno";
//altri valori

Mtr A = MulMtr(&B,&C);



Come potete vedere questa funzione effettua una moltiplicazione e memorizza in A.
Mettiamo caso io implementi un overloading di operatore.



struct Mtr
[
//dati membro
Mtr operator* (Mtr y)
[
return MulMtr(this,&y);
]
];


Per ottimizzare al massimo le prestazioni, sarà meglio usare
Mtr A = MulMtr(&B,&C);
oppure
Mtr A = B * C;

Io credo sia meglio la prima poichè con l'overloading dell'operatore vado ad allocare due funzioni, no?
Thank you!

oregon
23-05-2006, 18:34
Lo scopo dell'operatore e' quello di svolgere le operazioni all'interno dell'overload ... quindi, per avere l'optimum, dovresti scrivere il codice che c'e' nella MulMtr in operator*

XWolverineX
23-05-2006, 18:50
Quindi utilizzare l'overloading, se strutturato in quel modo fa perdere tempo.
Volevo sapere perchè questa operazione è fatta da DirectX nella moltiplicazione delle matrici.

oregon
23-05-2006, 19:37
Perche' ... tu hai i sorgenti di DirectX?

XWolverineX
23-05-2006, 20:02
No, ma dato che queste sono usabili sia in C che in C++, decide in fase di compilazione se abilitarti o no determinate cose (come l'overloading degli operatori e altro), e tutto ciò è visibile nei file include.

oregon
23-05-2006, 20:05
Beh ... questo mi sembra un buon motivo per operare in quel modo ...

Ma se il tuo codice deve girare solamente in C++ ...

XWolverineX
23-05-2006, 20:13
Bhe lo so ma non ci vuole molto a sostituire le moltiplicazioni con una chiamata di funzione.
Grazie mille.

Loading