最近我一直在設計一個Thread類的庫,我做了下面這樣的主題抽象類:純虛擬方法VS.函數指針
class Thread {
public:
run() { /*start the thread*/ }
kill() { /*stop the thread*/ }
protected:
virtual int doOperation(unsigned int, void *) = 0;
};
房地產線程類將繼承這個抽象類,並在其自己的邏輯實現doOperation
方法,類似於Strategy Pattern。
的問題是,我依靠它定義運行的線程在下面的函數是C後端庫:
int startThread(char* name, (int)(*)(unsigned int, void*), int, int, int, void*);
正如你所看到的;第二個參數是線程循環(主函數)的函數指針,這裏是問題;由於我使用這個C函數來啓動run
方法中的線程,因此我將doOperation
的地址傳遞給第二個參數,由於類型不匹配,無法完成此操作。
我試着用reinterpret_cast
來返回一個指針,但是我ISO-C++禁止返回一個未初始化函數成員的指針。 我不知道如何克服這種衝突,使用靜態方法是我猜想的唯一解決方案,但它炸燬了我的設計模式!
Michael,Stefan,感謝您分享您的豐富想法,他們解決了我的問題。 – Josef 2009-02-02 00:29:58
請參見下面的問題: - http://stackoverflow.com/questions/499153/passing-a-qualified-non-static-member-function-as-a-function-pointer/499299#499299 – 2009-02-01 08:59:45