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

Susan Sarandon
Lepaskan: 2024-11-23 10:17:12
asal
507 orang telah melayarinya

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
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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!

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