函数作为参数传递时,需要传递的是函数的地址。
在 c 语言里回调函数常用函数指针类型来定义,例如:
void log(int value){
std::cout << value << std::endl;
}
void callFunc2(void(*cb)(int), int value){
cb(value);
}
然后调用时,传入 log 函数名即地址:
int main()
{
callFunc2(log, 233);
// lambda
callFunc2([](int value) -> void {
log(233);
}, 233);
return 0;
}
输出:
233
233
在 C++里使用函数类型可以代替函数指针,使用 std::function 重写上面的例子:
#include<functional>
void log(int value){
std::cout << value << std::endl;
}
// 定义Callback类型(别名)
using Callback = std::function<void(int)>;
void callFunc(Callback cb, int value){
cb(value);
}
int main()
{
callFunc(log, 233);
callFunc([](int value) -> void {
log(233);
}, 233);
return 0;
}
输出:
233
233