檢索Lambda 的參數和傳回型別
在lambda 表達式中,決定參數和回傳型別對於接受lambda 作為參數的函數至關重要。讓我們探討一下這個任務的可行性以及實現它的方法。
Lambda Traits
為了取得lambda 的參數和回傳類型,建議定義可以如下使用的lambda_traits 範本:
auto lambda = [](int i) { return long(i*10); }; lambda_traits<decltype(lambda)>::param_type i; //i should be int lambda_traits<decltype(lambda)>::return_type l; //l should be long
template<typename TLambda> void f(TLambda lambda) { typedef typename lambda_traits<TLambda>::param_type P; typedef typename lambda_traits<TLambda>::return_type R; std::function<R(P)> fun = lambda; //I want to do this! //... }
使用decltype 內省參數類型
幸運的是,可以檢索使用lambda 運算子(lambda 運算子( ) 的decltype 的參數型別。此技術在以下 function_traits 實作中得到了優雅的示範:template <typename T> struct function_traits : public function_traits<decltype(&T::operator())> {};
範例用法
考慮以下範例: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; }
以上是如何檢索 C 中 Lambda 表達式的參數和回傳類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!