std::thread中传入类方法
时间: 2023-10-21 18:25:17 浏览: 125
C++简单多线程案例
4星 · 用户满意度95%
在使用std::thread时,如果要传入类的成员方法作为参数,可以使用std::bind函数或者lambda表达式来绑定。这样可以避免多次拷贝构造的问题。具体的方法如下:
1. 使用std::bind函数:可以使用std::bind函数将类的成员方法与类对象绑定,然后将绑定后的结果作为参数传给std::thread。例如:
```
class MyClass {
public:
void myMethod(int arg) {
// 类方法的实现
}
};
MyClass obj;
std::thread t1(&MyClass::myMethod, &obj, 42);
```
这里使用std::bind来绑定了类的成员方法和类对象obj,并将绑定结果作为参数传给std::thread。注意要使用&obj传递类对象的引用。
2. 使用lambda表达式:可以使用lambda表达式来捕获类对象,并在lambda表达式中调用类的成员方法。然后将lambda表达式作为参数传给std::thread。例如:
```
class MyClass {
public:
void myMethod(int arg) {
// 类方法的实现
}
};
MyClass obj;
std::thread t1([&obj]() {
obj.myMethod(42);
});
```
这里使用lambda表达式捕获类对象obj,并在lambda表达式中调用类的成员方法。然后将lambda表达式作为参数传给std::thread。
通过使用std::bind函数或者lambda表达式,可以在std::thread中传入类的成员方法,并且避免多次拷贝构造的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [std::thread创建线程,使用std::ref()传递类对象参数](https://blog.csdn.net/CodeBowl/article/details/125959193)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文