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
Patricia Arquetteasal
2025-01-02 19:42:43523semak imbas

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;
}

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;
}

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!

Kenyataan:
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