使用线程绑定一个类成员函数(代码实现)

因为非静态成员函数在编译的时候,会在参数列表中加入this指针指向对象本身,之后可以通过this指针访问类成员。

而静态成员函数不属于对象,而是属于整个类,相当于全局函数,在编译的时候参数列表是不会进行扩展,加入this指针的。

因此,如果绑定的是一个非静态成员函数,在编译的时候,解析参数列表就会出现错误,导致编译失败。

下面是绑定非静态类成员函数的代码及编译结果:

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

class people
{
public:
	void fun(int a) 
	{
		cout << "a = " << a << endl;
	};
};

int main(void)
{
	std::thread t(&people::fun, 1);
	t.join();

	return 0;
}

结果编译错误,未找到相应的重载函数,参数不匹配,当然找不到!:
在这里插入图片描述
下面是绑定静态类成员函数的代码及编译结果:(正确姿势)

其实就是在成员函数里面加了一个static声明

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

class people
{
public:
	static void fun(int a) 
	{
		cout << "a = " << a << endl;
	};
};

int main(void)
{
	std::thread t(&people::fun, 1);
	t.join();

	return 0;
}

运行结果如下:
在这里插入图片描述
谢谢阅读

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章