Rumah > pembangunan bahagian belakang > C++ > Bolehkah Anda Mengkhususkan Setiap Templat dalam Ruang Nama `std`? Had dan Elaun dalam Pengkhususan Eksplisit

Bolehkah Anda Mengkhususkan Setiap Templat dalam Ruang Nama `std`? Had dan Elaun dalam Pengkhususan Eksplisit

Mary-Kate Olsen
Lepaskan: 2024-10-28 17:12:30
asal
1024 orang telah melayarinya

 Can You Specialize Every Template in the `std` Namespace?  Limitations and Allowances in Explicit Specializations

Pengkhususan Eksplisit dalam Ruang Nama std: Had dan Elaun

Sementara pengguna diberi keupayaan untuk menambahkan pengkhususan eksplisit pada ruang nama std, tertentu templat dilarang secara jelas daripada amalan ini.

Pengkhususan Terlarang

Mengikut standard, templat berikut tidak boleh dikhususkan:

  • had_numerik untuk jenis standard bukan aritmetik seperti complex
  • shared_ptr, melainkan mereka memenuhi kriteria khusus untuk kebolehsalinan, kebolehtugasan dan kebolehbandingan
  • weak_ptr, melainkan mereka boleh disalin dan ditugaskan
  • std::hash, melainkan pengkhususan mematuhi keperluan templatnya
  • Templat kelas yang ditakrifkan dalam (kecuali common_type)
  • Tempatan, yang memerlukan pengkhususan khusus
  • istreambuf_iterator, yang mesti mempunyai pembina salinan remeh, pembina lalai dan pemusnah
  • kompleks untuk jenis selain apungan, double, atau long double
  • atom, melainkan pengkhususan mengikut kekangan tertentu seperti telah memadamkan pembina salinan dan pembina nilai
  • unary_function dan binary_function, yang ditamatkan dan tidak boleh dikhususkan

Pertimbangan Menyeluruh

Selain larangan khusus ini, piawaian menyediakan garis panduan am untuk menambah ruang nama std:

  • Pengisytiharan atau takrifan kepada std atau ruang kecilnya tidak boleh ditambah melainkan dinyatakan secara eksplisit.
  • Pengkhususan templat dibenarkan hanya jika ia bergantung pada jenis yang ditentukan pengguna dan memenuhi keperluan perpustakaan.
  • Pengkhususan fungsi ahli untuk perpustakaan standard kelas, templat fungsi ahli dan templat kelas ahli adalah dilarang.
  • Instasiasi templat eksplisit hanya dibenarkan jika ia bergantung pada jenis yang ditentukan pengguna dan memenuhi keperluan perpustakaan.

Dengan mematuhi kepada batasan ini, pembangun boleh memastikan bahawa pengkhususan mereka tidak bercanggah dengan integriti dan kebolehkendalian perpustakaan standard dalam ruang nama std.

Atas ialah kandungan terperinci Bolehkah Anda Mengkhususkan Setiap Templat dalam Ruang Nama `std`? Had dan Elaun dalam Pengkhususan Eksplisit. 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