Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Ungkapan C 17 Lipatan Boleh Memudahkan Invokasi Fungsi Variadik?

Bagaimanakah Ungkapan C 17 Lipatan Boleh Memudahkan Invokasi Fungsi Variadik?

Barbara Streisand
Lepaskan: 2024-11-19 11:17:02
asal
960 orang telah melayarinya

How Can C  17 Fold Expressions Simplify Variadic Function Invocation?

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), ...);
Salin selepas log masuk

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;
}
Salin selepas log masuk

2. Cipta Pemula Senarai:

Gunakan pemula senarai untuk mengembangkan argumen variadic dan panggil fungsi yang diubah suai:

{ print_wrap(args)... }
Salin selepas log masuk

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)... }
Salin selepas log masuk

4. Penggunaan:

SO_EXPAND_SIDE_EFFECTS(f(args));
Salin selepas log masuk

Kelebihan:

  • Menghasilkan hanya satu panggilan fungsi dengan N argumen.
  • Menyokong fungsi dengan operator koma terlebih beban.
  • Memastikan penilaian kiri-ke-kanan daripada hujah.

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!

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