2010-11-18 21 views
3
I have the following class: 

class Point2D 
{ 
    protected: 

      double x; 
      double y; 
    public: 
      double getX() const {return this->x;} 
      double getY() const {return this->y;} 
    ... 

};Fonction pointeur à élément

Parfois, j'ai besoin de retourner la coordonnée x, parfois la coordonnée y, donc j'utilise le pointeur sur la fonction membre getX(), getY(). Mais je ne suis pas capable de retourner les coordonnées, voir ci-dessous, s'il vous plaît.

double (Point2D :: *getCoord)() const; 

class Process 
{ 
    ...... 
    public processPoint(const Point2D *point) 
    { 

     //Initialize pointer 
     if (condition) 
     { 
     getCoord = &Point2D::getX; 
     } 
     else 
     { 
     getCoord = &Point2D::getY; 
     } 

     //Get coordinate 
     double coord = point->(*getCoordinate)(); //Compiler error 

    } 

} 

Merci pour votre aide.

+0

pour des situations un peu plus complexes, je voudrais utiliser les états (motif d'état), mais pour cela, il semble bien (maintenant que James a donné la solution) – stefaanv

Répondre

6

Vous devez utiliser l'opérateur ->* pour appeler une fonction membre via un pointeur:

(point->*getCoordinate)();