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!