Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++ stl]passare un parametro al comparer

    CIao.
    Sto cercando di ordinare un vector in modi diversi , per questo uso la funzione stl sort e passo il comparer:
    codice:
    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;
    }
    a seconda del tipo di CEntity che puo' essere A,B o C devo per A e B fare il cast del centity
    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.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Crea un functor e passa i parametri che ti interessano tramite il costruttore.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    capito , ma dopo dato che uso la funzione stl sort , posso ridefinire magari l'operatore < ?è possibile?
    e le funzioni bind2nd e bind1nd a cosa servono?
    grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.