採取以下爲例如: (注意,示例不起作用,但應該足以說明什麼,我試圖做)使用函數指針不知道的情況下提前
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 –