最近在用QT包裝一個Paho - MQTT C Cient的函數接口(調用MQTT的C的SDK來實現一個對接onenet平臺的軟件用QT實現)時遇到一個。這是bug模塊的C函數實現:http://www.eclipse.org/paho/files/mqttdoc/MQTTAsync/html/publish.html
問題:C++類的成員函數可以作爲C函數的函數參數來調用嗎?
來看看編譯的bug提示
顯然在C語言中函數是全局可見的,函數名就是代碼區的首地址,在編譯時,該地址空間就會被開闢。那麼在代碼調用時肯定可以用,但是呢C++的成員函數沒有實例化之前是沒有開闢內存的,那麼這樣調肯定是不行的。
解決:經過不斷的百度,找資料終於找到了解決辦法就是把被當做回調函數聲明爲靜態函數。
這樣就解決了。
當然這只是其中的一種方法,還有更好的方法可以在評論區留言一起討論哈!