將Boost::function 降級為普通函數指針
問題:
問題:
問題:
解決方案:
雖然有些答案建議使用target() 從boost::function 檢索指針,這只適用於最初綁定的對像有資格綁定到C 回調的簡單情況。對於非平凡的情況, boost::function 的底層機制需要多個指針,而不僅僅是一個。因此,更穩健的解決方案是建立一個符合回呼簽章的 shim 函數,並將呼叫委託給儲存為使用者資料的 boost::function。
// Shim function for callback typedef void (*CallbackType)(int x, void* user_data); void MyCallback(int x, void* userData) { boost::function<void(int)>& pfn = static_cast<boost::function<void(int)> &>(userData); pfn(x); } // Usage boost::function<void(int)> fn = boost::bind(myFunction(5)); RegisterCallback(MyCallback, &fn);範例: 此方法允許將 boost::function 與包含使用者資料的 C 回呼一起使用。但是,如果回調簽名缺少使用者資料指針,則可能需要完全重新設計才能在大多數情況下可用。
以上是如何安全地將 `boost::function` 傳遞給普通函式指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!