Bolehkah Kelas Tempatan Digunakan sebagai Argumen Templat dalam Algoritma STL?

DDD
Lepaskan: 2024-11-16 10:42:02
asal
836 orang telah melayarinya

Can Local Classes Be Used as Template Arguments in STL Algorithms?

Menggunakan Kelas Ditakrifkan Setempat dengan Algoritma STL

Dalam pengaturcaraan, selalunya wajar untuk menggunakan kelas yang ditakrifkan secara setempat sebagai predikat untuk algoritma STL. Malangnya, piawaian C 98/03 secara jelas melarang amalan ini, dengan menyatakan bahawa:

A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.
Salin selepas log masuk

Sekatan ini dinyatakan dalam Perkara 14.3.1 piawaian C.

Pada mulanya, sekatan ini adalah dianggap sebagai kesilapan oleh ramai pengaturcara dan akan diperbaiki lebih awal jika standard berkembang lebih cepat. Walau bagaimanapun, C 11 telah mengalih keluar sekatan ini, membenarkan jenis tempatan digunakan sebagai hujah templat.

Sebagai contoh, kod berikut, yang sebelum ini tidak sah dalam C 98/03, kini dibenarkan dalam C 11:

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

Kebanyakan penyusun moden membenarkan penggunaan kelas tempatan sebagai hujah templat, bersama-sama dengan menyediakan sokongan untuk ungkapan lambda.

Atas ialah kandungan terperinci Bolehkah Kelas Tempatan Digunakan sebagai Argumen Templat 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan