Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Kita Boleh Menentukan Parameter dan Jenis Pengembalian Fungsi C Lambda?

Bagaimanakah Kita Boleh Menentukan Parameter dan Jenis Pengembalian Fungsi C Lambda?

Mary-Kate Olsen
Lepaskan: 2024-12-25 14:50:10
asal
638 orang telah melayarinya

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

Menemui Parameter dan Jenis Pengembalian Lambda

Soalan

Bolehkah kita menentukan parameter dan jenis pengembalian fungsi lambda dalam C ? Jika ya, bagaimana?

Siasatan ini didorong oleh keperluan untuk mengetahui jenis dalam templat fungsi yang mengambil lambda sebagai hujah.

Jawapan

Penyelesaian terletak dalam menggunakan function_traits, seperti yang ditunjukkan oleh kod ini:

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;
}
Salin selepas log masuk

Pelaksanaan ini memanfaatkan decltype operator() lambda untuk memperoleh jenis parameternya.

Had Terkenal

Adalah penting untuk ambil perhatian bahawa teknik ini tidak berkesan dengan lambda generik seperti [](auto x) {}.

Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Menentukan Parameter dan Jenis Pengembalian Fungsi C Lambda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan