2010-09-08 51 views

回答

5

非靜態成員變量有一個隱含的this參數由編譯器內部傳遞。

你有

ClassInQuestion { 
    void threadFunc(int); 
} 

和編譯器在內部創建了一個函數

void ClassInQuestion_threadFunc(ClassInQuestion* thisObject, int); 

所以除非線程程序接受一個指針TA功能有ClassInQuestion*類型的第一個參數將不匹配預期的功能簽名。

+1

問題顯示爲「靜態*或*成員函數」。 – 2010-09-08 14:34:31

+0

我也看錯的問題,但對於MFC,即需要以下顯示遊離的或靜態成員函數:http://www.go4expert.com/forums/showthread.php?t=3197和用於並行線程(C-API ),這似乎很明顯,所以我猜這個問題有點草率。 – stefaanv 2010-09-08 15:21:10

2

主要是因爲非靜態成員函數有一個隱式參數,很難填入函數指針。我想,當指定一個非靜態成員函數時,你也會期望該對象是已知的,這與函數的其他功能是不同的。

1

通常,線程過程必須由具有回調機制的線程庫中的預定義函數調用。爲了能夠調用成員函數(不是靜態的),你需要一個類的對象來調用該函數。然而,沒有一個可用的線程庫支持這個,即它們不接受將被用來調用註冊函數的對象。所以所有這些功能都應該是靜態的並且適當地進行類型化。

相關問題