首頁 > 後端開發 > C++ > 如何在編譯時確定 C Lambda 的參數和回傳類型?

如何在編譯時確定 C Lambda 的參數和回傳類型?

Linda Hamilton
發布: 2024-12-25 17:53:11
原創
683 人瀏覽過

How Can I Determine the Parameter and Return Types of a C   Lambda at Compile Time?

確定Lambda 的參數和返回類型

給定一個lambda,可以使用編譯來提取其參數類型和返回類型-時間技巧。這可以透過使用 lambda 特徵來實現,它提供了一種在編譯時存取有關 lambda 的資訊的方法。

要定義 lambda 特徵,我們可以利用 decltype 運算子來檢查 lambda 運算子的簽章( )。透過專門針對該類型的模板,我們可以檢索參數和傳回類型。

例如,以下程式碼實現lambda 特徵:

template<typename T>
struct lambda_traits
    : public lambda_traits<decltype(&T::operator())> { };

template<typename ReturnType, typename... Args>
struct lambda_traits<ReturnType(Args...)> {
    using param_type = Args...;
    using return_type = ReturnType;
};
登入後複製

利用這些特徵,我們可以擷取lambda 的參數和回傳類型如下:

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
登入後複製

這種方法允許我們從lambda 動態建構std::function對象,如圖所示在以下程式碼中:

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; // Construct the std::function object
}
登入後複製

請注意,由於無法在編譯時確定確切的類型,因此這種方法對於通用lambda 而言會失敗,例如[](auto x ) {}。

以上是如何在編譯時確定 C Lambda 的參數和回傳類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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