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.
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() ); }
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!