Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menggelung Dengan Betul Melalui Pek Parameter C Menggunakan Pengembangan Pek?

Bagaimanakah Saya Boleh Menggelung Dengan Betul Melalui Pek Parameter C Menggunakan Pengembangan Pek?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-04 05:41:39151semak imbas

How Can I Correctly Loop Through a C   Parameter Pack Using Pack Expansion?

Menggelung pada Pek Parameter dengan Peluasan Pek

Dalam coretan kod yang disediakan, anda berhasrat untuk menggelung melalui pek parameter panjang berubah-ubah menggunakan sintaks pengembangan pek. Walau bagaimanapun, kod tersebut gagal untuk menyusun dengan ralat "pek parameter mesti dikembangkan dalam konteks ini."

Untuk menyelesaikan isu ini, anda perlu meletakkan pengembangan pek dalam konteks yang dibenarkan. Satu lokasi yang sesuai adalah dalam senarai braced-init-. Pertimbangkan kod yang diubah suai berikut:

template<typename... Args>
static void foo2(Args &&... args)
{
    int dummy[] = { 0, ( (void) bar(std::forward<Args>(args)), 0) ... };
}

Begini cara ia berfungsi:

  • Kod dalam senarai pemula tatasusunan dummy disertakan dalam {}.
  • Sintaks pengembangan pek digunakan dalam senarai pemula. Khususnya, ( (void) bar(std::forward(args)), 0) dikembangkan untuk setiap parameter dalam pek.
  • Pengendali koma digunakan untuk memisahkan setiap ungkapan, memastikan bahawa fungsi bar() dipanggil untuk setiap parameter.
  • Kurungan di sekeliling bar(std::forward(args)) digunakan untuk membuang keputusan kepada batal. Ini memastikan bahawa pengendali koma terbina dalam digunakan dan bukan yang terlampau beban.
  • Tatasusunan dummy dicipta dengan sekurang-kurangnya satu elemen untuk mengelak daripada mencipta tatasusunan 0 panjang yang tidak sah apabila pek parameter kosong.

Dengan pengubahsuaian ini, kod akan berjaya menyusun dan menggelung pada pek parameter.

C 17 Ungkapan Lipat

Dalam C 17, anda boleh memudahkan kod menggunakan ungkapan lipatan:

((void) bar(std::forward<Args>(args)), ...);

Ungkapan ini mengembangkan pek dan menggunakan operasi yang ditentukan (dalam kes ini, memanggil bar()) kiri-ke-kanan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggelung Dengan Betul Melalui Pek Parameter C Menggunakan Pengembangan Pek?. 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