將C 類別成員函數註冊為C 回呼函數
在使用需要回呼函數的C 函式庫時,我們可能會遇到需要註冊的情況C類別成員函數。但是,嘗試將非靜態成員函數註冊為回調會導致編譯器錯誤。
我們可以註冊 C 類別成員函數嗎?
是的,可以可以使用靜態成員函數將 C 類成員函數註冊為回調函數。
靜態成員函數方法
靜態成員函數沒有類別類型的隱式第一個參數。因此,它們的簽名與回調函數的預期類型匹配,從而允許它們成功註冊。
範例
class A { public: static int e(int *k, int *j) { return 0; } }; A::A() { register_with_library(A::e); }
替代方法
int e(int *k, int *j) { A a; return a.e(k, j); } A::A() { register_with_library(e); }
struct EF { A* a; int operator()(int *k, int *j) { return a->e(k, j); } }; A::A() { EF ef = {this}; register_with_library(ef); }方法的選擇取決於 C 函式庫的特定要求以及所需的封裝和可重用性等級。
以上是如何將 C 類成員函數註冊為 C 回呼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!