采取以下为例如: (注意,示例不起作用,但应该足以说明什么,我试图做)使用函数指针不知道的情况下提前
class Point {
float x, y;
public:
float getX() const { return x; }
float getY() const { return y; }
};
class Polygon {
std::vector<Point> points;
std::vector<float> get(float (Point::*func)()const) {
std::vector<float> ret;
for(std::vector<Point>::iterator it = points.begin(); it != points.end(); it++) {
// call the passed function on the actual instance
ret.push_back(it->*func());
}
return ret;
}
public:
std::vector<float> getAllX() const {
return get(&Point::getX); // <- what to pass for getX
}
std::vector<float> getAllY() const {
return get(&Point::getY); // <- what to pass for getY
}
};
编辑:
的问题是操作的顺序;呼叫周围的编译器所需的括号这样:
(it->*func)()
在添加更多使用它的代码之前,您应该修复'Polygon :: get'中的编译错误。 –
相关:http://stackoverflow.com/questions/6586205/what-are-the-pointer-to-member-and-operators-in-c/6586248#6586248 –