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!