Rumah >pembangunan bahagian belakang >C++ >Bolehkah saya Menggunakan Kelas Tempatan sebagai Predikat dalam Algoritma STL?

Bolehkah saya Menggunakan Kelas Tempatan sebagai Predikat dalam Algoritma STL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 10:58:03557semak imbas

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

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!

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