是否有一些使用Object :: *的实际示例

时间:2012-03-12 11:51:20

标签: c++

我刚刚听说有一种这样的类型,指向Object成员。这是它

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

但我之前没有使用过,并且想知道某些人真正使用它。你对此有什么经验吗?

4 个答案:

答案 0 :(得分:2)

如果您想在不重复代码的情况下对成员应用相同的处理方法,这将非常有用。

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);

还有许多其他用法,例如快速代表(link)。

答案 1 :(得分:0)

这些是pointers to class members,用于实现各种仿函数类(例如:boost::functionstd::function)。

答案 2 :(得分:0)

答案 3 :(得分:-1)

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

   private: //private variables if you have any

};

现在要创建一个对象Point p,您可以通过执行p.xp.y来访问元素,就像使用struct对象一样。

如果要创建类指针,请执行Point *p,现在如果要访问x, y,则可以执行p->ap->b。如果您有另一个对象Point t,并且希望将t的地址分配给p,那么您可以执行p = &t