Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memanggil Fungsi pada Argumen Templat Variadic dalam C?

Bagaimana untuk Memanggil Fungsi pada Argumen Templat Variadic dalam C?

Patricia Arquette
Lepaskan: 2024-11-24 16:31:14
asal
304 orang telah melayarinya

How to Call Functions on Variadic Template Arguments in C  ?

Fungsi Memanggil pada Argumen Templat Variadic

Matlamatnya adalah untuk melaksanakan fungsi print() yang mengambil bilangan argumen yang berubah-ubah dan melaksanakan fungsi arbitrari pada setiap hujah. Ini dikehendaki sebagai alternatif padat kepada pelaksanaan rekursif dengan pengkhususan berasingan untuk setiap jenis hujah.

Penyelesaian C 17

Dalam C 17, ini boleh dicapai menggunakan ungkapan lipat:

(f(args), ...);
Salin selepas log masuk

Ungkapan ini mengembangkan argumen dalam args dan memanggil f() pada setiap satu. Jika f() mengembalikan objek dengan pengendali koma yang terlebih beban, gunakan:

((void)f(args), ...);
Salin selepas log masuk

Penyelesaian Pra-C 17

Untuk versi C sebelum C 17, pendekatan biasa ialah menggunakan pemula senarai untuk mengembangkan hujah:

{ print(Args)... }
Salin selepas log masuk

Walau bagaimanapun, print() mengembalikan batal, jadi untuk mengelakkan ralat penyusunan, kod boleh diubah suai seperti yang ditunjukkan di bawah:

using expand_type = int[];
expand_type{ (print(Args), 0)... };
Salin selepas log masuk

Ini berfungsi untuk hujah variadic, tetapi terdapat beberapa kaveat untuk dipertimbangkan. Untuk menjadikan corak ini boleh diguna semula, makro boleh dibuat:

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }
Salin selepas log masuk

Walau bagaimanapun, untuk mengelakkan potensi isu dengan pengendali koma terlampau beban, makro boleh dikemas kini seperti berikut:

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), void(), 0)... }
Salin selepas log masuk

Pra -Penyelesaian C 17 juga mungkin memerlukan pertimbangan tambahan untuk mengelakkan peruntukan memori yang tidak perlu.

Atas ialah kandungan terperinci Bagaimana untuk Memanggil Fungsi pada Argumen Templat Variadic 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