首頁 >後端開發 >C++ >C 類別成員函數可以用作 C 回呼函數嗎?

C 類別成員函數可以用作 C 回呼函數嗎?

Patricia Arquette
Patricia Arquette原創
2024-12-11 17:42:13307瀏覽

Can a C   Class Member Function Be Used as a C Callback Function?

使用C 類成員函數作為C 回呼函數

可以將C 類成員函數註冊為C 回調函數,但有一定的要求函數要滿足。

Q1:首先可以註冊C嗎像我正在嘗試做的類別成員函數,如果是的話怎麼做?

A1:是的,如果函數宣告為靜態函數,則可以將 C 類別成員函數註冊為回呼函數。與非靜態成員函數不同,靜態成員函數沒有隱式「this」指標作為其第一個參數。這使得它們能夠與 C 回呼函數的簽名相容。

Q2:有替代/更好的方法來解決這個問題嗎?

A2:這裡是一些替代選項:

  • 建立一個免費函數:實作一個單獨的免費函數與回呼函數簽章相符的(非成員)函數,然後將其註冊到庫中。
  • 使用函數指標:建立一個指向 C 類靜態成員函數的函數指標並將函數指標傳遞給函式庫。這要求庫支援使用函數指標作為回調函數。
  • 使用包裝函數:在類別外部定義一個包裝函數,該函數呼叫所需的類別成員函數,並具有與C 回調函數。然後,向庫註冊包裝函數。

使用靜態成員函數的範例:

class A {
public:
    A() { register_with_library(&A::e); }
    ~A() {}

    static int e(int *k, int *j) {
        return 0;
    }
};

以上是C 類別成員函數可以用作 C 回呼函數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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