Apakah peraturan untuk pengkhususan templat dalam pengaturcaraan generik C++?

王林
Lepaskan: 2024-06-05 12:19:57
asal
725 orang telah melayarinya

Pengkhususan templat membolehkan pelaksanaan khusus disediakan untuk jenis tertentu. Peraturan termasuk: Apabila pengkhususan padanan tepat wujud, gunakan pengkhususan itu. Pengkhususan ini digunakan apabila pengkhususan padanan separa wujud. Apabila tiada pengkhususan wujud, templat utama digunakan. Pengkhususan penuh diutamakan daripada pengkhususan separa. Pengkhususan penuh boleh dibebankan, tetapi pengkhususan separa dan templat induk tidak boleh.

C++ 泛型编程中模板特化的规则是什么?

Peraturan Pengkhususan Templat dalam Pengaturcaraan Generik C++

Pengkhususan Templat membolehkan kami menyediakan pelaksanaan khusus untuk kelas atau fungsi templat dan bukannya menggunakannya pada semua jenis. Ini memberikan fleksibiliti, kecekapan dan kebolehbacaan yang lebih besar.

Peraturan:

  • Jika terdapat pengkhususan eksplisit yang betul-betul sepadan dengan parameter templat, pengkompil akan menggunakan pengkhususan tersebut.
  • Jika pengkhususan padanan yang tepat tidak wujud, pengkompil akan menggunakan pengkhususan separa (hanya sebahagian daripada parameter templat ditentukan).
  • Jika tiada pengkhususan penuh atau separa wujud, pengkompil akan menggunakan templat utama (tanpa sebarang parameter templat dinyatakan).
  • Pengkhususan penuh diutamakan daripada pengkhususan separa.
  • Berbilang pengkhususan penuh boleh dibebankan, tetapi pengkhususan separa dan templat utama tidak boleh.

Contoh Praktikal:

Pertimbangkan fungsi templat berikut untuk menukar dua elemen:

template<typename T>
void swap(T& a, T& b) {
  T temp = a;
  a = b;
  b = temp;
}
Salin selepas log masuk

Kami boleh mencipta pengkhususan penuh untuk jenis tertentu, seperti int: int

template<>
void swap(int& a, int& b) {
  a ^= b;
  b ^= a;
  a ^= b;
}
Salin selepas log masuk

当我们调用 swaprreee

Apabila kita panggil swap, pengkompil akan memilih pengkhususan padanan terbaik berdasarkan jenis parameter yang diluluskan:

int x = 1, y = 2;
// 调用完全特化的 swap 函数
swap(x, y); // x = 2, y = 1
Salin selepas log masuk
Peraturan lain:
  • Pengkhususan templat boleh menerima nilai parameter templat lalai.
  • Pengkhususan boleh dikhususkan lagi untuk membentuk hierarki pengkhususan.
  • Pengkhususan boleh digunakan untuk templat kelas dan fungsi.
🎜

Atas ialah kandungan terperinci Apakah peraturan untuk pengkhususan templat dalam pengaturcaraan generik C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!