天天看点

函数指针与仿函数

函数指针

在平常的C/C++代码编程中, 我们经常会碰到函数指针(Function Pointer)这个概念,函数指针,顾名思义,指向函数入口的指针。

像我们平常使用的指向数组的指针,我们可以传递数组的地址。函数指针也一样,我们用代码演示一下具体用法:

#include<iostream>  
using namespace std;

typedef void(*func)(int);

void print(int value)
{
    printf("%d ", value);
}

void add(int &sum, int index, func pFunc)
{
    sum += index;
    pFunc(sum);
}

int main(void)
{
    int sum = 0;
    for (int i = 0; i < 10; i++)
    {
        add(sum, i, print);
    }
    system("pause");
    return 0;
}      

我们可以将一个函数名作为一个参数传递。

仿函数

在《C++标准程序库》一书中对仿函数的解释是:任何东西,只要其行为像函数,就可以称之为仿函数。

那么仿函数到底是什么呢?

想一下,我们平常调用函数少不了的是什么?

函数行为,是指可以使用小括号传送参数,调用某个东西

所以只要我们定义的对象可以有这种行为就可以了,因此我们要成为仿函数,就必须要重载()操作符,以让对象的行为像函数。一个对象,具备像函数一样的行为, 就称为函数对象。

#include<iostream>  
using namespace std;

class MyPrint
{
public:
    void operator()(int value) const
    {
        printf("%d ", value);
    }
};

void add(int &sum, int index, MyPrint &pFunc)
{
    sum += index;
    pFunc(sum);
}

int main(void)
{
    int sum = 0;
    MyPrint print;
    for (int i = 0; i < 10; i++)
    {
        add(sum, i, print);
    }

    system("pause");
    return 0;
}      

函数指针与仿函数的区别

继续阅读