我刚刚听说有一种这样的类型,指向Object成员。这是它
class Point{float x, y;};
float Point::*p2 = &Point::x;
但我之前没有使用过,并且想知道某些人真正使用它。你对此有什么经验吗?
答案 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::function
或std::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.x
和p.y
来访问元素,就像使用struct
对象一样。
如果要创建类指针,请执行Point *p
,现在如果要访问x, y
,则可以执行p->a
和p->b
。如果您有另一个对象Point t
,并且希望将t
的地址分配给p
,那么您可以执行p = &t
。