c++容器中存储一个参数个数和类型不确定的std::function
时间: 2024-09-24 11:10:54 浏览: 38
C++11中lambda、std::function和std:bind详解
5星 · 资源好评率100%
在C++中,`std::function` 是一种模板类,用于封装任意类型的可调用对象,包括成员函数、自由函数、lambda表达式等。如果你想在容器(如`std::vector`)中存储一个参数个数和类型不确定的`std::function`,你可以这样做:
1. 定义一个通用的`std::function`实例,接受任意数量和类型的参数:
```cpp
#include <functional>
// 假设我们不知道具体参数类型,只关心函数的行为
using AnyFunction = std::function<void(void)>; // 使用void作为占位,实际应用中替换为你需要的类型
// 创建一个存储不同函数的容器
std::vector<AnyFunction> functions;
```
2. 添加函数到容器中:
```cpp
// 添加一个接受两个int参数并打印它们的函数
auto addTwoInts = [](int a, int b) { std::cout << "Sum: " << a + b << std::endl; };
functions.push_back(addTwoInts);
// 添加一个返回字符串的函数
auto getName = []() -> std::string { return "John"; };
functions.push_back(getName);
```
3. 调用容器中的函数:
```cpp
for (const auto& func : functions) {
func(); // 如果是 void 类型的函数,直接调用
if constexpr (std::is_invocable<decltype(func), int, int>::value) {
func(10, 20); // 如果你知道函数接受哪些参数类型,可以显式传参
}
}
```
阅读全文