Bolehkah saya Menggunakan Kelas Tempatan sebagai Predikat dalam Algoritma STL?

Mary-Kate Olsen
Lepaskan: 2024-11-16 10:58:03
asal
500 orang telah melayarinya

Can I Use Local Classes as Predicates in STL Algorithms?

Kelas Tempatan dalam Algoritma STL

Dalam bidang pengaturcaraan C, Perpustakaan Templat Standard (STL) menawarkan set algoritma yang komprehensif untuk memanipulasi struktur data. Walau bagaimanapun, persoalan biasa timbul mengenai penggunaan kelas yang ditakrifkan secara tempatan sebagai predikat dalam algoritma STL.

Larangan dalam Standard Pra-C 11

Secara sejarah, C 98 Piawaian /03 secara jelas melarang penggunaan jenis tempatan sebagai hujah templat untuk algoritma STL. Sekatan ini diperluaskan kepada kelas tempatan. Contohnya:

struct even : public std::unary_function<int,bool> {
  bool operator()(int x) { return !(x % 2); }
};
std::remove_if(v.begin(), v.end(), even()); // error
Salin selepas log masuk

Mengikut standard, "Jenis tempatan, jenis tanpa kaitan, jenis tidak dinamakan atau jenis yang dikompaun daripada mana-mana jenis ini tidak boleh digunakan sebagai hujah templat untuk parameter jenis templat."

Rasional di Sebalik Sekatan

Rasional asal untuk sekatan ini tidak jelas. Ia mungkin disebabkan oleh potensi kekaburan atau batasan teknikal dengan pelaksanaan pengaturcaraan meta templat dalam versi awal bahasa.

Relaksasi dalam C 11

Mujurlah, Standard C 11 mengalih keluar sekatan ini, membenarkan pembangun menggunakan kelas tempatan sebagai hujah templat. Perubahan ini sangat meningkatkan ekspresif dan fleksibiliti algoritma STL.

Penyelesaian dalam Amalan

Dalam amalan, kebanyakan penyusun moden kini menyokong penggunaan kelas tempatan dengan algoritma STL , walaupun standard bahasa asas tidak membenarkannya secara eksplisit. Walau bagaimanapun, adalah penting untuk menyemak dokumentasi untuk pengkompil khusus yang digunakan untuk memastikan keserasian.

Atas ialah kandungan terperinci Bolehkah saya Menggunakan Kelas Tempatan sebagai Predikat dalam Algoritma STL?. 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