function对象是一个很适用的适配器, 只要函数的调用类型相同就可以用同一个function对象表示,堪称万金油, 但需要注意的是有时候参数的const属性会影响function对象的表现, 比如有下面的例子:
void foo(const int *p) {
cout << "const" << endl;
}
void bar(int *p) {
cout << "nomal" << endl;
}
int main(int argc, char* argv[]){
int *p = nullptr;
int *cp = nullptr;
function<void(int*)> f = bar;
f = foo;
f(cp);
function<void(const int*)> g = foo;
//g = bar;//error
g(cp);
return 0;
}
我们知道void(int)和void(const int)是完全相同的两个函数签名, 但是如果把形参换成指针就不一样了, 这也是上面的例子中为什么把没有有const形参的bar赋值给变量g会产生类型转换错误, 应为这是两种完全不同的类型, 不能相互转换, 需要注意。