Saber2pr's Blog

函数类型与函数指针

函数指针

函数作为参数传递时,需要传递的是函数的地址。

在 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

函数类型 std::function

在 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