Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membuat Jenis Tersuai Saya Berfungsi dengan Berasaskan Julat untuk Gelung dalam C ?

Bagaimanakah Saya Boleh Membuat Jenis Tersuai Saya Berfungsi dengan Berasaskan Julat untuk Gelung dalam C ?

DDD
DDDasal
2024-12-19 22:33:16795semak imbas

How Can I Make My Custom Types Work with Range-Based for Loops in C  ?

Menjadikan Jenis Tersuai Serasi dengan Berasaskan Julat untuk Gelung

Untuk mendayakan penggunaan berdasarkan julat untuk gelung dengan jenis data tersuai, anda mempunyai dua pilihan utama:

  • Sediakan begin() dan end() Ahli Fungsi:
    Laksanakan fungsi ahli begin() dan end() dalam jenis tersuai anda yang mengembalikan iterator.
  • Buat Free begin() dan end() Fungsi:
    Tentukan fungsi percuma bernama begin() dan end() dalam ruang nama yang sama dengan jenis tersuai anda, mengambil jenis anda sebagai hujah dan kembalikan iterator.

Pertimbangan Ruang Nama:

Jika jenis tersuai anda berada dalam ruang nama, seperti xml, anda mesti mengisytiharkan begin() dan end() berfungsi dalam ruang nama itu juga. Tiada keperluan untuk menentukan sama ada xml::begin() atau std::begin().

Keperluan Kaedah:

Nilai mula/akhir kembali bukan diperlukan untuk menjadi iterator sebenar. Walau bagaimanapun, mereka mesti mematuhi keperluan khusus:

  • Sokongan pra-kenaikan ( )
  • Sediakan ungkapan permulaan yang sah
  • Laksanakan binari tidak sama (!=) untuk boolean perbandingan
  • Dedahkan orang ramai pemusnah

Berasaskan Julat untuk Peluasan Gelung:

Berasaskan julat untuk sintaks gelung, untuk (range_declaration : range_expression), berkembang kepada pseudokod berikut:

{
  auto &range = range_expression;
  for (auto begin = begin_expr, end = end_expr; begin != end; ++begin) {
    range_declaration = *begin;
    loop_statement
  }
}

C 17 Decoupled End Jenis:

Dalam C 17, pseudokod dikembangkan gelung berasaskan julat ditukar kepada:

{
  auto &range = range_expression;
  auto begin = begin_expr;
  auto end = end_expr;
  for (; begin != end; ++begin) {
    range_declaration = *begin;
    loop_statement
  }
}

Perubahan ini membenarkan jenis lelaran akhir berbeza daripada jenis lelaran permulaan. Ia membolehkan penggunaan iterator "sentinel" yang hanya menyokong perbandingan ketidaksamaan dengan jenis iterator mula.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Jenis Tersuai Saya Berfungsi dengan Berasaskan Julat untuk Gelung 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