使用線程綁定一個類成員函數(代碼實現)

因爲非靜態成員函數在編譯的時候,會在參數列表中加入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;
}

運行結果如下:
在這裏插入圖片描述
謝謝閱讀

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