我有一個類Alpha
和一個函數pointFun
,它應該接受Alpha
成員函數和通用外部函數(例如:主定義)。C++接受成員函數指針和外部函數指針
我已覆蓋pointFun
,使其可通過Alpha
成員函數和外部函數使用。但由於pointFun
功能其實很長,我想避免重複兩遍。
有沒有辦法接受這兩種函數指針類型?我試圖做到這一點(請參閱代碼的評論部分),但它不起作用。
// fpointer.h
#include <iostream>
using std::cout;
using std::endl;
class Alpha {
public:
Alpha() {}
void pointFun (void (Alpha::*fun)());
void pointFun (void (*fun)());
//void pointFun (void (*funA)(), void (Alpha::*funB)()); // <-- how to make THIS instead of the previous two?
void printA ();
void assignF ();
private:
int value;
bool set;
};
void Alpha::pointFun(void (Alpha::*fun)()) {
(Alpha().*fun)();
}
void Alpha::pointFun(void (*fun)()) {
(*fun)();
}
/* // I want this:
void Alpha::pointFun(void (*funA)() = 0, void (Alpha::*funB)() = 0) {
(*funA)();
(Alpha().*funB)();
// same code, different pointer functions
}
*/
void Alpha::printA() {
cout << "A" << endl;
// some long code
}
void Alpha::assignF() {
pointFun(&Alpha::printA);
}
這是主要的:
// MAIN.cpp
#include <iostream>
#include "fpointer.h"
using namespace std;
void printB() {
cout << "B" << endl;
// same long code as before
}
int main() {
Alpha A;
A.pointFun(printB);
A.assignF();
}
成員ve的實現rsion看起來非常可疑和愚蠢。 –
那麼你將如何實現它? (我是新的函數指針) – AndroidGuy
@AndroidGuy應該可以使用正確定義的['std :: function <>'](http://en.cppreference.com/w/cpp/utility/functional/function )模板作爲參數。 –