首頁 > 後端開發 > C++ > 如何檢索 C 中 Lambda 表達式的參數和回傳類型?

如何檢索 C 中 Lambda 表達式的參數和回傳類型?

Patricia Arquette
發布: 2024-12-22 17:47:10
原創
877 人瀏覽過

How Can I Retrieve the Parameter and Return Types of a Lambda Expression in C  ?

檢索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(&amp;T::operator())>
{};
登入後複製
對於通用 lambda,function_traits 直接使用其operator() 的簽章。對於成員函數指針,它專門提供了 arity、result_type 和參數類型。

範例用法

考慮以下範例:

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;
}
登入後複製
此範例說明如何利用 function_traits 來驗證 lambda 的預期參數和回傳類型。請注意,此方法可能不適用於像 [](auto x) {} 這樣的通用 lambda。

以上是如何檢索 C 中 Lambda 表達式的參數和回傳類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板