我們能否確定 C 中 lambda 函數的參數和回傳類型?如果是這樣,如何實現?
此查詢是由於需要了解以 lambda 作為參數的函數模板中的類型而驅動的。
解決方案在於在使用function_traits 時,如以下程式碼所示:
template <typename T> struct function_traits : public function_traits<decltype(&T::operator())> {}; template <typename ClassType, typename ReturnType, typename... Args> struct function_traits<ReturnType(ClassType::*)(Args...) const> { enum { arity = sizeof...(Args) }; typedef ReturnType result_type; template <size_t i> struct arg { typedef typename std::tuple_element<i, std::tuple<Args...>>::type type; }; }; // Example usage int main() { auto lambda = [](int i) { return long(i * 10); }; typedef function_traits<decltype(lambda)> traits; static_assert(std::is_same<long, traits::result_type>::value, "err"); static_assert(std::is_same<int, traits::arg<0>::type>::value, "err"); return 0; }
此實作利用了lambda 的decltype
需要注意的是,此技術對於像[](auto x) {} 這樣的通用 lambda 無效。
以上是如何確定 C Lambda 函數的參數和傳回類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!