c++在多线程std::thread中调用重载的类成员函数

知识点:

示例代码如下

#include<iostream>
#include<thread>
using namespace std;

class Print{
 public:
  void print() { cout << "void print()" << 0 << endl; }
  void print(int i) { cout << "void print(int i)" << i << endl; }
  int print(float i) { cout << "void print(float i)" << i << endl; return 0; }
  void print(int i, float j) { cout << "void print(int i, float j)" << i << " " << j << endl; }
  void print(const int& i) { cout << "void print(const int& i)" << i << endl; }
};
int main() {
  Print p1, p2;
  thread t1(static_cast<void(Print::*)()>(&Print::print), &p1);
  thread t2(static_cast<void(Print::*)(int)>(&Print::print), &p1, 1);
  thread t3(static_cast<int(Print::*)(float)>(&Print::print), &p1, 2.0);
  thread t4(static_cast<void(Print::*)(int, float)>(&Print::print), &p1, 3, 4.0);
  thread t5(static_cast<void(Print::*)(const int&)>(&Print::print), &p2, 5); // 不能去掉&,否则调用的是void print(int i)

  t1.join();t2.join();t3.join();t4.join();t5.join();
  return 0;
}

输出示意

void print(int i)void print(float i)1void print()
void print(int i, float j)3 0
2
4
void print(int i)5

Process finished with exit code 0

参考

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值