2024年5月30日发(作者:)

c++function函数的用法

C++中的function函数是一种通用的函数对象,可以用来存储和

调用任何可调用的对象,包括函数、函数指针、成员函数指针等。它

的使用方式类似于一个函数指针,但是更加灵活和安全。

function函数可以用来实现回调函数、事件处理、泛型编程等,

它可以在编译时或运行时确定可调用对象的类型,从而实现类型安全

和动态多态。

function函数的定义和使用方式如下:

```c++

#include

using namespace std;

// 定义一个function对象

function add = [](int x, int y) { return x

+ y; };

// 调用function对象,类似于一个函数指针

int result = add(1, 2);

// 重新赋值function对象,可以存储不同类型的可调用对象

add = [](int x, int y) { return x * y; };

result = add(3, 4);

```

除了使用lambda表达式来定义function对象,还可以使用普通

函数、函数指针、成员函数指针等来初始化function对象,例如:

- 1 -

```c++

// 定义一个普通函数

int sub(int x, int y) { return x - y; }

// 定义一个函数指针

int (*p)(int, int) = sub;

// 定义一个成员函数指针

class A {

public:

int add(int x, int y) { return x + y; }

};

A obj;

int (A::*q)(int, int) = &A::add;

// 使用函数、函数指针、成员函数指针来初始化function对象

function f1 = sub;

function f2 = p;

function f3 = q;

// 调用function对象

int r1 = f1(2, 1); // r1 = 1

int r2 = f2(4, 3); // r2 = 1

int r3 = (obj.*q)(6, 5); // r3 = 11

```

在使用function函数时需要注意几点:

- 2 -

1. function对象的类型必须与可调用对象的类型匹配,否则会

编译错误。

2. function对象不支持可变参数的可调用对象,例如可变参数

函数和函数模板。

3. 调用function对象时,如果function对象没有被初始化,

会引发std::bad_function_call异常。

- 3 -