Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengulangi Senarai Argumen Templat Variadik dalam C?

Bagaimana untuk Mengulangi Senarai Argumen Templat Variadik dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-10-23 17:17:01107semak imbas

How to Iterate Over Variadic Template Argument Lists in C  ?

Mengulangi Senarai Argumen Templat Variadic

Senarai hujah templat variadic yang dibungkus, walaupun berkuasa, boleh menimbulkan cabaran dalam mengakses hujah individu. Isu ini amat relevan apabila seseorang perlu mengulangi senarai tersebut untuk mengasingkan hujah berdasarkan jenisnya.

Untuk mencapai matlamat ini, satu pilihan ialah memanfaatkan ungkapan lipatan yang diperkenalkan dalam C 17. Dengan menggunakan boleh panggil, a ungkapan lambda dalam kes ini, seseorang boleh mentakrifkan gelung yang berulang melalui argumen dan melaksanakan operasi yang diingini.

Berikut ialah contoh:

<code class="cpp">#include <iostream>

template <class ... Ts>
void Foo(Ts && ... inputs) {
  int i = 0;

  // Lambda that executes for each passed argument.
  ([&] {
    ++i;
    std::cout << "input " << i << " = " << inputs << std::endl;
  }(), ...);
}

int main() {
  Foo(2, 3, 4u, (int64_t)9, 'a', 2.3);
  return 0;
}</code>

Dalam contoh ini, lambda adalah sangat ringkas, tetapi operasi yang lebih kompleks boleh dilakukan dalam gelung. Adalah penting untuk ambil perhatian bahawa teknik ini memerlukan C 17 atau lebih baru.

Untuk senario di mana pemulangan atau keluar daripada lelaran diperlukan, cuba/buang dan ubah/jika pendekatan suis tersedia tetapi harus dianggap sebagai bau kod dan digunakan hanya jika tidak dapat dielakkan.

Atas ialah kandungan terperinci Bagaimana untuk Mengulangi Senarai Argumen Templat Variadik dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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