將類別成員函數作為回調傳遞
在嘗試將類別成員函數作為API 的回調傳遞時,您可能會遇到編譯錯誤由於缺少參數列表。要解決此問題,建議使用函數指標或捕獲類別實例的 lambda 表達式。
函數指標
錯誤訊息建議使用 '&CLoggersInfra:: RedundancyManagerCallBack' 建立指向該成員的指標。這是因為類別成員函數通常採用兩個參數:第一個參數是指向類別實例的指針,第二個參數是函數的參數。
void (CLoggersInfra::*ptr)(int); // Function pointer type ptr = &CLoggersInfra::RedundancyManagerCallBack;
但是,函數指標方法需要您可以明確指定第一個參數,這可能不適用於所有場景。
Lambda 表達式(C 11 和稍後)
Lambda 表達式提供了一種更簡潔靈活的方式來捕獲類別實例並建立回調函數:
auto lambda = [this](int arg) { this->RedundancyManagerCallBack(arg); };
這個lambda 表達式擷取'this'指標並定義一個採用整數參數“arg”的匿名函數。然後,您可以將lambda 作為回調傳遞:
m_cRedundencyManager->Init(lambda);
結論
透過使用函數指標或lambda 表達式,您可以有效地將類別成員函數作為回調傳遞,同時遵守API 要求並避免編譯錯誤。 Lambda 表達式在 C 11 及更高版本中特別方便,因為它們簡化了類別實例的擷取。
以上是如何將 C 類成員函數作為回調傳遞給 API?的詳細內容。更多資訊請關注PHP中文網其他相關文章!