Mempermudahkan Seruan Fungsi Variadik Menggunakan C 17 Lipatan
Argumen templat variadik menyediakan cara yang mudah untuk berfungsi dengan fungsi yang menerima bilangan argumen yang berubah-ubah . Walau bagaimanapun, mencipta rantai rekursif untuk memanggil fungsi pada setiap hujah variadic boleh membawa kepada penjanaan kod berlebihan. Begini cara anda boleh mengatasi isu ini menggunakan ungkapan C 17 lipatan atau penyelesaian pra-C 17.
Ungkapan C 17 Lipatan:
(f(args), ...);
Ekspresi lipatan ini boleh digunakan untuk memanggil fungsi pada semua argumen templat variadic, menghasilkan satu fungsi N-arg hubungi.
Penyelesaian Pra-C 17:
1. Fungsi Balut dalam Pengecam:
Ubah fungsi untuk mengembalikan int, yang boleh digunakan sebagai hujah tiruan dalam senarai pemula:
int print_wrap(const T& t) { print(t); return 0; }
2. Cipta Pemula Senarai:
Gunakan pemula senarai untuk mengembangkan argumen variadic dan panggil fungsi yang diubah suai:
{ print_wrap(args)... }
3. Tentukan Ruang Nama Pembantu:
Untuk menjadikan pendekatan ini boleh diguna semula, tentukan ruang nama pembantu:
namespace so { using expand_type = int[]; } #define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }
4. Penggunaan:
SO_EXPAND_SIDE_EFFECTS(f(args));
Kelebihan:
Atas ialah kandungan terperinci Bagaimanakah Ungkapan C 17 Lipatan Boleh Memudahkan Invokasi Fungsi Variadik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!