簡介:
Lambda 表達式提供了一種簡潔表達式便捷的方法在C 中定義匿名函數。然而,在使用可變參數模板時,傳遞 lambda 可能具有挑戰性。本文探討了一種使用模板元程式將通用 lambda 轉換為 std::function 的技術。
基於模板的 std::function 轉換:
啟用以下轉換帶有 std::function 任意參數的 lambda,我們不能依賴模板類型推導。相反,我們使用標識類型來包裝 lambda 函數並保留其類型資訊:
template <typename T> struct identity { typedef T type; };
使用此標識類型,我們創建一個接受包裝的 lambda 作為參數的通用函數:
template <typename... T> void func(typename identity<std::function<void(T...)>>::type f, T... values) { f(values...); }
用法範例:
雖然這種方法不需要明確指定模板參數,它涉及向函數傳遞附加參數。以下是一個範例:
func([](int x, int y, int z) { std::cout << (x*y*z) << std::endl; }, 3, 6, 8);
結論:
雖然此解決方案解決了在可變參數模板上下文中將通用lambda 轉換為std::function的挑戰,但它確實需要傳遞額外的參數。或者,可以使用明確模板參數規格或考慮其他方法,例如使用函數指標或函數物件包裝器。
以上是如何使用 C 中的範本將通用 Lambda 轉換為 std::functions ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!