Cara Mengulangi Senarai Argumen Templat Variadik Yang Dikemas
Dalam C , mengulangi senarai argumen templat variadic yang dibungkus menimbulkan cabaran kerana ketidakupayaan untuk mengetahui bilangan hujah dan mendapatkan data daripadanya secara individu. Isu ini ditambah lagi dengan penggunaan makro dalam membina fungsi, yang menghalang panggilan rekursif.
Untuk menangani perkara ini, penyelesaian yang disediakan menggunakan jenis tersuai, mana-mana, yang boleh menyimpan pelbagai jenis data. Dengan menghantar jenis ini kepada templat variadic, hujah dikembangkan menjadi vektor sebarang objek. Selepas itu, elemen individu vektor ini boleh diambil menggunakan fungsi getter khusus (get
Walaupun kaedah ini menyelesaikan tugas, ia memerlukan panggilan fungsi verbose, seperti foo(arg(1000)). Untuk memudahkan ini, kami mencari kaedah lelaran yang lebih ringkas atau setara dengan std::get() untuk senarai argumen templat variadic yang dibungkus.
Penyelesaian menggunakan STL Fold Expressions dan Lambda
Untuk C 17 dan lebih baru, ungkapan lipatan boleh digunakan bersama-sama dengan fungsi lambda untuk mencapai lelaran. Lambda boleh melakukan operasi sembarangan dalam gelung, termasuk menambah pembilang dan mencetak hujah semasa:
<code class="cpp">template <class ... Ts> void Foo (Ts && ... inputs) { int i = 0; ([&] { // Do things in your "loop" lambda ++i; std::cout << "input " << i << " = " << inputs << std::endl; } (), ...); }</code>
Kaedah ini menyediakan mekanisme lelaran yang lebih ringkas dan boleh dibaca.
Alternatif untuk Menangani Pecah Gelung
Sementara penyelesaian yang dinyatakan di atas menyelesaikan tugas, ia tidak mempunyai keupayaan untuk melaksanakan pemecahan atau pengembalian dalam gelung. Untuk menangani perkara ini, kita boleh menggunakan penyelesaian seperti:
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengulangi Senarai Argumen Templat Variadik yang Dikemas Dengan Ringkas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!