Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Kembangkan Tuple ke dalam Argumen Fungsi Templat Variadik dalam C?

Bagaimanakah Saya Boleh Kembangkan Tuple ke dalam Argumen Fungsi Templat Variadik dalam C?

Patricia Arquette
Lepaskan: 2025-01-02 19:42:43
asal
509 orang telah melayarinya

How Can I Expand Tuples into Variadic Template Function Arguments in C  ?

Memperluas Tuple ke dalam Argumen Fungsi Templat Variadic

Dalam C 17 dan kemudian, fungsi std::apply menyediakan penyelesaian yang mudah untuk masalah ini. Ia memerlukan objek boleh panggil dan tuple sebagai argumen, pada asasnya mengembangkan tupel menjadi argumen individu untuk fungsi:

#include <tuple>

template<typename Tret, typename... T> Tret func(const T&... t);

int main() {
    std::tuple<int, float> my_tuple;
    auto result = std::apply(func<int, int, float>, my_tuple);
    return 0;
}
Salin selepas log masuk

Dalam Clang versi 3.9 dan seterusnya, std::experimental::apply boleh digunakan untuk fungsi yang serupa.

Mengendalikan Fungsi Templat Argumen

Jika fungsi templat mengambil hujah templat variadic, penyelesaian boleh digunakan:

#include <tuple>

template<typename T> void my_func(T&& t) {}

int main() {
    std::tuple<int, float> my_tuple;
    std::apply([](auto&&... args) { my_func(args...); }, my_tuple);
    return 0;
}
Salin selepas log masuk

Pendekatan ini membolehkan fungsi templat menerima hujah tuple, walaupun dengan keselamatan jenis yang kurang sedikit . Untuk penyelesaian yang lebih umum dan mantap, rujuk sumber ini: https://blog.tartanllama.xyz/passing-overload-sets/.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kembangkan Tuple ke dalam Argumen Fungsi Templat Variadik dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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