首頁 >後端開發 >C++ >如何將 C 類成員函數註冊為 C 回呼?

如何將 C 類成員函數註冊為 C 回呼?

Barbara Streisand
Barbara Streisand原創
2024-12-11 19:36:14704瀏覽

How Can I Register C   Class Member Functions as C Callbacks?

將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);
}

替代方法

  • 建立一個功能指標指向C 成員函數的函數指針,並將其註冊到庫中。
int e(int *k, int *j) {
    A a;
    return a.e(k, j);
}

A::A() {
    register_with_library(e);
}
  • 函子: 建立一個函子類別它重寫了operator()來呼叫C成員函數。將仿函數的實例註冊為回呼。
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中文網其他相關文章!

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