Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Melepaskan Tuple of Values ​​sebagai Argumen kepada Fungsi Templat Variadik dalam C ?

Bagaimanakah Saya Boleh Melepaskan Tuple of Values ​​sebagai Argumen kepada Fungsi Templat Variadik dalam C ?

Patricia Arquette
Lepaskan: 2025-01-02 22:07:40
asal
636 orang telah melayarinya

How Can I Pass a Tuple of Values as Arguments to a Variadic Template Function in C  ?

Peluasan Argumen Fungsi Templat Variadik daripada Tuples

Pertimbangkan fungsi templat dengan parameter templat variadik:

template<typename Tret, typename... T> Tret func(const T&... t);
Salin selepas log masuk

Bagaimana bolehkah anda memanggil func() menggunakan tuple nilai sebagai argumen?

Penyelesaian C Moden (C 17 dan Kemudian)

Dalam C 17, fungsi std::apply() menyediakan penyelesaian yang elegan:

std::apply(the_function, the_tuple);
Salin selepas log masuk

Clang 3.9 Penyelesaian

Jika anda menggunakan Clang 3.9, anda boleh menggunakan fungsi std::experimental::apply.

Mengendalikan Fungsi Templat

Jika fungsi_templat, anda boleh menggunakan penyelesaian berikut:

#include <tuple>

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

int main() {

  std::tuple<int, float&> my_tuple;

  std::apply([](auto &&... args) { my_func(args...); }, my_tuple);

  return 0;
}
Salin selepas log masuk

Set Lebihan Umum Invocation

Untuk penyelesaian yang lebih serba boleh yang boleh mengendalikan set beban lampau dan templat fungsi, rujuk penjelasan komprehensif di https://blog.tartanllama.xyz/passing-overload-sets/.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melepaskan Tuple of Values ​​sebagai Argumen kepada Fungsi Templat Variadik dalam C ?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan