簡體   English   中英

具有函數指針的C ++回調

[英]C++ callback with function pointers

我正在編寫一個使用第3方庫打開專有文件的C ++應用程序。 在我的應用程序中,用戶可以執行以下操作:

int main(int argc, char* argv[]) {
  CustomFileFormat f1;   
  f1.open( "c:/file1.xyz" );
  f1.process();

  CustomFileFormat f2;   
  f2.open( "c:/file2.xyz" );
  f2.process();

  Result r = f1.compare( f2 );
  r.generateReport();

  return 0;
}

我遇到的問題是process()函數。 該函數向第三方庫發送命令,該命令公開了如下定義的回調函數:

typedef void (*FileProgressCallback)( double dProgress, bool& shouldAbort );

該回調函數將從第3方庫中調用,告訴我已處理了多少文件(接收到的dProgress值將在0到1之間)以及我可以用來使處理停止的shouldAbort bool變量。

我遇到的問題是我不知道如何編寫process()函數的代碼,因此在調用回調時,我知道返回的結果是例如f1還是f2實例。 是否可以定義CustomFileFormat類的成員函數,以便在調用該函數時知道正在使用哪個(this)?

一種簡單的方法是在.process()調用之前,為您設置一個帶有一些上下文的全局變量。 如果將全局堆棧作為堆棧,則您甚至可以執行遞歸處理(盡管如前所述,這聽起來並不是您需要的一部分)。

一個更復雜的答案是使用libffi的閉包之類的東西(該庫可從https://sourceware.org/libffi/https://github.com/libffi/libffi獲得 )。 庫的該部分實際上在運行時生成(少量)代碼,這些代碼可以將其他參數與從調用方接收到的參數相關聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM