Fungsi Ahli Sebagai Perbandingan untuk Isih
Apabila menggunakan fungsi ahli sebagai kriteria perbandingan untuk menyusun, ralat penyusunan mungkin timbul disebabkan oleh sekatan yang dikenakan oleh piawaian ISO C. Piawaian ini melarang pengalamatan langsung fungsi ahli bukan statik yang tidak layak atau dalam kurungan untuk mendapatkan penunjuk kepada fungsi ahli. Ralat sedemikian boleh ditemui semasa cuba mengisih tatasusunan dalam kelas.
Untuk menyelesaikan isu ini, satu penyelesaian ialah mengisytiharkan fungsi perbandingan doCompare sebagai statik. Walau bagaimanapun, jika fungsi bergantung pada data daripada contoh MyClass, pendekatan alternatif adalah untuk mengubah kelas menjadi functor perbandingan. Ini melibatkan pengubahsuaian doCompare untuk melaksanakan fungsi operator() dan menggunakan std::sort seperti berikut:
doSort() { std::sort(arr,arr+someSize, *this); }
Selain itu, nilai pulangan yang hilang dalam kaedah doSort patut dipertimbangkan. Untuk pelaksanaan yang lengkap, ia sepatutnya menyerupai:
int* doSort() { std::sort(arr,arr+someSize, &doCompare); return arr; }
Sebagai alternatif, seseorang boleh menggunakan std::mem_fun dan mengikat untuk mengubah fungsi ahli menjadi fungsi percuma. Pilihan lain ialah membenamkan fungsi dalam kelas, seperti yang ditunjukkan dalam coretan berikut:
class MyClass { struct Less { Less(const MyClass& c) : myClass(c) {} bool operator () ( const int & i1, const int & i2 ) {// use 'myClass'} MyClass& myClass; }; doSort() { std::sort(arr,arr+someSize, Less(*this)); } };
Dengan memilih mana-mana pendekatan ini, pembangun boleh berjaya mengendalikan pengisihan tatasusunan dalam kelas menggunakan fungsi ahli sebagai kriteria perbandingan.
Atas ialah kandungan terperinci Bagaimana Menggunakan Fungsi Ahli dengan Betul untuk Isih dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!