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

Bolehkah saya Menggunakan Kelas Tempatan dengan Algoritma STL dalam C Moden?

Susan Sarandon
Susan Sarandonasal
2024-11-23 10:17:12569semak imbas

Can I Use Local Classes with STL Algorithms in Modern C  ?

Memanfaatkan Kelas Tempatan dengan Algoritma STL

Semasa meneroka sifat pelbagai rupa algoritma STL, anda mungkin mempersoalkan ketidakupayaan untuk menggunakan kelas yang ditentukan secara tempatan sebagai predikat dalam algoritma ini. Asal-usul sekatan ini terletak dalam batasan piawaian C 98/03.

Menurut artikel 14.3.1 piawai, pengehadan dikenakan pada jenis yang berfungsi sebagai parameter templat. Antara kekangan ini ialah larangan jenis tempatan, jenis tanpa kaitan, jenis tidak dinamakan atau jenis yang diperoleh daripada mana-mana gabungannya.

template <class T> class Y { /* ... */ };
void func() {
      struct S { /* ... */ }; //local class
      Y< S > y1; // error: local type used as template-argument
      Y< S* > y2; // error: pointer to local type used as template-argument
}

Sekatan ini, walaupun tidak disengajakan, berterusan disebabkan oleh kadar evolusi standard yang perlahan . Namun begitu, penyusun kontemporari, yang menerima kemajuan versi C kemudian, kini secara amnya membenarkan penggunaan jenis tempatan dalam algoritma.

Contoh:

#include <vector>
#include <algorithm>

int main() {
   int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
   std::vector<int> v(array, array + 10);

   struct even : public std::unary_function<int, bool> {
      bool operator()(int x) { return !(x % 2); }
   };

   std::remove_if(v.begin(), v.end(), even()); // compiles successfully
   return 0;
}

Dalam semasa C landskap, penggunaan jenis yang ditakrifkan secara tempatan dalam algoritma STL telah menjadi amalan biasa, bersama-sama dengan pengenalan ungkapan lambda, selanjutnya meningkatkan fleksibiliti algoritma.

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