我有一个类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 )模板作为参数。 –