2012-03-12 3 views
1

Je viens juste d'entendre qu'il existe un type de type comme celui-ci, un point à Object member. Voici ceY a-t-il des exemples pratiques qui utilisent Object :: *

class Point{float x, y;}; 
float Point::*p2 = &Point::x; 

mais je n'ai pas utiliser avant, et je me demande un peu-corps vraiment utiliser it.Do vous avez une expérience de cela?

+0

Jetez un oeil à des bibliothèques comme boost :: intrusive – PlasmaHH

Répondre

2

Ceci est utile si vous souhaitez appliquer le même traitement aux membres sans dupliquer le code.

vector<Point> points; // suppose it has many elements 

vector<double> Project(const vector<Point> points, int Point::* coord) 
{ 
    vector<double> result; 
    for (auto& p: points) 
     result.push_back(p.*coord); 
    return result; 
} 

// usage: 
vector<double> Xs = Project(points, &Point::x); 
vector<double> Ys = Project(points, &Point::y); 

Il y a beaucoup d'autres usages aussi bien, par exemple les délégués rapides (link).

+0

intéressant..soit le code "pour (auto & p: points)" –

+0

@ user974349: il s'agit d'une fonctionnalité C++ 11, disponible sur GCC 4.5+ et MSVC 11 (bêta). Vous pouvez préférer 'std :: for_each (début (points), fin (points), [& résultat] (point const & p) {result.push_back (p);}' avec MSVC 10. –

-1
class Point { 
    public: //public variables (can be accessed by outsider) 
    float x, y; 

    private: //private variables if you have any 

}; 

Maintenant, pour créer un objet que vous feriez Point p, et vous pouvez accéder aux éléments en faisant p.x et p.y, comme vous le feriez avec un objet struct.

Si vous voulez créer un pointeur de classe, ne Point *p, maintenant si vous voulez accéder x, y, alors vous feriez p->a et p->b. Si vous avez un autre objet Point t, et vous voulez attribuer l'adresse de t à p, alors vous pouvez faire p = &t.

+1

Je suppose que vous manque le point de la question. C'est juste l'accès des membres, pas de pointeurs aux membres. –

0

Celles-ci sont pointers to class members et sont utilisées par exemple pour implémenter différentes classes de foncteurs (par exemple: boost::function ou std::function).

Questions connexes