Untuk menggunakan penunjuk fungsi untuk merujuk terbina- dalam pengendali seperti pengendali "lebih besar daripada" (">") dalam kelas templat, adalah perlu untuk menentukan lebihan jenis yang betul. Walau bagaimanapun, ini boleh mencabar.
Operator terbina dalam C, seperti operator aritmetik dan logik, bukanlah fungsi operator sebenar. Sebaliknya, ia secara langsung diterjemahkan ke dalam arahan pemasangan oleh pengkompil. Oleh itu, adalah tidak mungkin untuk mendapatkan penunjuk fungsi untuk mereka.
Objek fungsi, yang ditakrifkan dalam standard C, menyediakan cara untuk bekerja dengan operasi yang berkelakuan seperti penunjuk fungsi tetapi bukan fungsi sebenar. Ia adalah objek templat yang mereput kepada operator analog dalam fungsi operator() mereka.
Sebagai contoh, objek fungsi std::greater mewakili operator yang lebih besar (">"). Ia boleh digunakan sebagai hujah penuding fungsi dalam kelas templat.
<code class="cpp">template<typename ParamsType, typename FnCompareType> class MyAction { public: MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCpmpare) : arg0_(arg0), arg1_(arg1), fnCompare_(fnCompare_) {} bool operator()() { if((fnCompare_)(arg0_,arg1_)) { // Do this } else { // Do s.th. else } } private: ParamsType& arg0_; ParamsType& arg1_; FnCompareType& fnCompare_; }</code>
<code class="cpp">void doConditional(int param1, int param2) { MyAction<int, std::greater<int>> action(param1, param2); if(action()) { // Do this } else { // Do that } }</code>
Walaupun penunjuk fungsi tidak boleh digunakan secara langsung dengan operator terbina dalam, mereka boleh digunakan dengan pengendali perpustakaan standard yang dilaksanakan sebagai fungsi sebenar. Walau bagaimanapun, adalah perlu untuk membuat instantiate contoh khusus kelas templat untuk pengendali dan pengkompil mungkin memerlukan pembayang untuk menyimpulkan hujah templat dengan betul.
Atas ialah kandungan terperinci ## Bolehkah Anda Mendapatkan Penunjuk Fungsi kepada Operator Terbina Dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!