將帶有捕獲變數的Lambda 函數傳遞給C 中的函數指標
在C 中使用lambda 函數時,可以隱式轉換為函數指標一個方便的功能。然而,帶有捕獲變數的 lambda 在這方面提出了挑戰,因為它們無法隱式轉換。
為了解決這個問題,我們需要了解潛在的限制。捕獲 lambda 會維護它們在定義時引用的變數的副本。這種封閉狀態產生了對作用域的依賴,而這種依賴無法用函數指標來表達。
由於指標的固有特性,無法明確轉換為函數指標。指標標識函數在記憶體中的位置,但它們不能攜帶捕獲變數引入的狀態。
要解決此限制,有幾種方法:
考慮以下範例來說明使用捕獲的變數作為函數指標傳遞lambda函數物件方法:
#include <ftw.h> #include <iostream> using namespace std; class Callback { public: void operator()(const char *fpath, const struct stat *sb, int typeflag) { cout << fpath << endl; } }; int main() { vector<string> entries; Callback callback; int ret = ftw("/etc", callback, 1); for (auto entry : entries) { cout << entry << endl; } return ret; }
在這個範例中,我們建立了一個Callback 類,它實現了函數呼叫operator() 來模仿lambda 函數的行為。然後,我們可以將此類的實例作為函數指標傳遞給 ftw 函數,從而有效地保留捕獲的變數。
透過了解將捕獲 lambda 轉換為函數指標的限制並利用替代方法,開發人員可以有效地使用需要函數指標的上下文中的 lambda。
以上是如何將帶有捕獲變數的 C Lambda 函數傳遞給函數指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!