使用模板將Lambda 轉換為std::function
在C 中,使用模板將lambda 函數轉換為std::function 可以是一項具有挑戰性的任務。為了實現這一點,模板類型推導是必不可少的,但在某些情況下它可能會面臨限制。
最初,嘗試將 lambda 轉換為 std::function 可能會因為缺少模板參數或候選匹配不匹配而失敗。若要解決此問題,請明確指定範本參數,如 std::function
要解決此問題,需要更細緻的解決方案。雖然模板類型推導無法直接從 lambda 推斷 std::function 模板參數,但仍可以透過提供額外的類型限制來引導。
考慮以下方法:將 lambda 函數包裝在結構體恆等
template <typename T> struct identity { typedef T type; }; template <typename... T> void func(typename identity<std::function<void(T...)>>::type f, T... values) { f(values...); }
int main() { func([](int x, int y, int z) { std::cout << (x*y*z) << std::endl; }, 3, 6, 8); return 0; }
以上是如何使用範本有效地將通用 C Lambda 轉換為 std::function?的詳細內容。更多資訊請關注PHP中文網其他相關文章!