首頁  >  文章  >  後端開發  >  如何安全地將 `boost::function` 傳遞給普通函式指標?

如何安全地將 `boost::function` 傳遞給普通函式指標?

Linda Hamilton
Linda Hamilton原創
2024-11-10 13:19:03128瀏覽

How to Safely Pass a `boost::function` to a Plain Function Pointer?

將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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn