CIao.
Sto cercando di ordinare un vector in modi diversi , per questo uso la funzione stl sort e passo il comparer:
a seconda del tipo di CEntity che puo' essere A,B o C devo per A e B fare il cast del centitycodice:inline int cmpCompare ( CEntity* pEnt1, CEntity* pEnt2) { double xEnt1 = (*pEnt1).GetCoord(0); double yEnt1 = (*pEnt1).GetCoord(1); double zEnt1 = (*pEnt1).GetCoord(2); double xEnt2 = (*pEnt2).GetCoord(0); double yEnt2 = (*pEnt2).GetCoord(1); double zEnt2 = (*pEnt2).GetCoord(2); if( xEnt1 == xEnt2 && yEnt1 == yEnt2 && zEnt1 < zEnt2) return 1; if( xEnt1 == xEnt2 && yEnt1 < yEnt2) return 1; if( xEnt1 < xEnt2 ) return 1; return 0; }
ad A o B e richiamare la funzione A->getCentroid o B-GetCentroid che ritorna un double, altrimenti se è C devo chiamare una altra funzione , GetCoord().
pensavo di passare un parametro al comparer con il tipo secondo cui devo caricare questi dati:l'indice è la componenete del punto 3d(x,y o z)
double xEnt1 = (*pEnt1).GetCoord(0);
double yEnt1 = (*pEnt1).GetCoord(1);
double zEnt1 = (*pEnt1).GetCoord(2);
double xEnt2 = (*pEnt2).GetCoord(0);
double yEnt2 = (*pEnt2).GetCoord(1);
double zEnt2 = (*pEnt2).GetCoord(2);
chiamando 3 funzioni diverse di caricamento dati :
se A:
double xEnt1 = (*A).GetCentroid(0);
double yEnt1 = (*A).GetCentroid(1);
.
.
.
se B:
double xEnt1 = (*B).GetCentroid(0);
double yEnt1 = (*B).GetCentroid(1);
.
.
.
se C:
double xEnt1 = C.GetCoord(0);
double yEnt1 = C.GetCoord(1);
.
.
.
ecc...
pensavo se non si puo' passare un parametro al comparer di templatizzare la classe e specializzarla per i 3 casi , voi come fareste?
grazie.

Rispondi quotando