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

如何確定 C Lambda 函數的參數和傳回類型?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-25 14:50:10584瀏覽

How Can We Determine the Parameter and Return Types of a C   Lambda Function?

發現 Lambda 的參數和回傳類型

問題

我們能否確定 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn