Administrator
发布于 2025-08-29 / 3 阅读
0
0

C++通用函数包装器

     std::function 是 C++ 标准库(C++11 引入)中的一个通用 函数包装器,它可以存储、复制和调用各种 可调用对象(如普通函数、Lambda 表达式、函数对象、成员函数等)。它是 `` 头文件的一部分,常用于实现 回调机制、事件处理、策略模式 等场景。

#### 1.基本语法

```

#include <functional>

std::function<返回值类型(参数类型1, 参数类型2, ...)> 变量名;

//示例:

std::function<int(int, int)> func; // 声明一个接收两个int参数、返回int的可调用对象包装器

```

#### 2.能存储哪些对象?

- 1.存储普通函数

```

#include <functional>

#include <iostream>

int add(int a, int b) {

return a + b;

}

int main() {

std::function<int(int, int)> func = add;

std::cout << func(2, 3); // 输出: 5

return 0;

}

```

- 2.存储Lambda表达式

```

int main() {

std::function<int(int, int)> func = [](int a, int b) {

return a * b;

};

std::cout << func(3, 4); // 输出: 12

return 0;

}

```

- 3.存储函数对象(仿函数)

```

struct Multiply {

int operator()(int a, int b) {

return a * b;

}

};

int main() {

std::function<int(int, int)> func = Multiply();

std::cout << func(3, 5); // 输出: 15

return 0;

}

```

- 4.存储成员函数(需绑定对象)

```

class Math {

public:

int subtract(int a, int b) {

return a - b;

}

};

int main() {

Math math;

// 使用 std::bind 绑定对象和成员函数

std::function<int(int, int)> func = std::bind(&Math::subtract, &math, std::placeholders::_1, std::placeholders::_2);

std::cout << func(10, 4); // 输出: 6

return 0;

}

```

- 5.静态成员函数

```

#include <functional>

#include <iostream>

class Math {

public:

static int divide(int a, int b){return a-b;}

};

int main() {

std::function<int(int, int)> func = Math::divide;

std::cout << func(3, 3); // 输出: 5

return 0;

}

```


评论