std::make_shared<std::thread> 带参函数
时间: 2023-06-23 21:49:52 浏览: 307
learn_new_cpp:cpp 11141720新字符
如果你想使用 `std::make_shared` 创建一个带参数的函数对象或函数指针,可以使用 `std::bind` 或者 lambda 表达式来实现。下面是一个使用 `std::bind` 的例子:
```c++
#include <memory>
#include <thread>
#include <functional>
void foo(int x, double y) {
// do something
}
int main() {
auto t = std::make_shared<std::thread>(std::bind(foo, 42, 3.14));
t->join();
return 0;
}
```
在这个例子中,`std::bind` 接收一个函数对象或函数指针和一系列参数,然后返回一个绑定了这些参数的函数对象或函数指针。`std::make_shared` 接收一个 `std::thread` 对象的构造函数参数,因此我们可以将绑定后的函数对象传递给 `std::make_shared`,然后将返回的智能指针存储在 `t` 中。
你也可以使用 lambda 表达式来实现:
```c++
#include <memory>
#include <thread>
void foo(int x, double y) {
// do something
}
int main() {
auto t = std::make_shared<std::thread>([]() { foo(42, 3.14); });
t->join();
return 0;
}
```
在这个例子中,我们使用一个 lambda 表达式来包装函数调用,然后将 lambda 表达式传递给 `std::make_shared`。这种方法更加简洁,但是可能会使代码更加难以阅读。
阅读全文