有误的!
就不该用函数指针指向类的成员函数,除非是类的静态成员函数。
问题代码:
#include<functional>
class A {
public:
int data;
void fun1(int i) {
data += i;
}
void fun2() {
std::function<void(int)> temp = fun1;
}
};
报错内容:
不存在从"void(int i)" 转换到 “std::function<void(int)>” 的适当构造函数。
这个报错很令人迷惑,这不俩类型一样?
后查阅资料发现,每一个类的成员函数都会被隐式的传递一个this指针,fun1的真实类型应该为:
//void fun1(int i);
void fun1(A* this,int i);
所以我们应该修改function的类型,最终代码为:
#include<functional>
class A {
public:
int data;
void fun1(int i) {
data += i;
}
void fun2() {
//此处进行了修改
std::function<void(A*,int)> temp = fun1;
}
};
后来,我的朋友又教了我一种更好用的方法,使用了C++11新标准的decltype关键字,如下:
void fun2() {
std::function<void(decltype(this),int)> temp = fun1;
}