std::vector存储std::function 如何实现
时间: 2024-10-29 10:06:04 浏览: 24
`std::vector` 存储 `std::function` 可以用来管理一组可执行的函数或回调,这些函数可以根据特定的需求动态添加或删除。`std::function` 是 C++11 引入的一个通用函数指针类型,它可以包装各种类型的函数和成员函数。
要实现这一点,首先你需要创建一个 `std::vector<std::function<R(Arg)>>`,这里的 `R` 表示函数的返回类型,`Arg` 是函数的输入参数类型。下面是一个简单的例子:
```cpp
#include <iostream>
#include <vector>
#include <functional>
// 假设我们有一个简单函数作为例子
void printHello(const std::string& name) {
std::cout << "Hello, " << name << "!\n";
}
int main() {
// 创建一个 vector 来存储打印 Hello 函数
std::vector<std::function<void(const std::string&)>> functions;
// 添加函数到 vector 中
functions.push_back(std::bind(printHello, std::placeholders::_1)); // 使用 _1 作为参数占位符
// 执行第一个函数
functions("Alice");
// 如果你需要存储更复杂的函数,如带有不同参数的,可以直接传入
std::function<int(double)> addFive = [](double x) { return x + 5; };
functions.push_back(addFive);
// ...其他操作,如迭代、根据条件过滤等
return 0;
}
```
在这个例子中,`functions`向量可以存储不同类型的功能,你可以通过索引访问并执行它们。当你不再需要某函数时,可以通过`erase`方法将其从向量中移除。
需要注意的是,由于 `std::function` 的大小取决于实际函数的类型和大小,所以在大量使用时可能会占用较多内存。此外,由于它的泛型特性,性能通常不如直接使用函数指针。如果性能是关键考虑因素,可能需要权衡是否使用 `std::function`。
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)