C 11 mentakrifkan operator terbina dalam dalam [over.built] dan menentukan bahawa operator ini mengambil bahagian dalam resolusi beban lampau tetapi tidak mempunyai tujuan lain. Oleh itu, anda tidak boleh mempunyai penunjuk fungsi yang menghala ke arahnya.
Untuk menangani isu ini, standard memperkenalkan objek fungsi dalam [function.objects]. Objek ini boleh mereput kepada operator yang sepadan dalam fungsi operator()nya:
Objek fungsi boleh digunakan sebagai hujah penunjuk fungsi, seperti yang ditunjukkan dalam respons yang diberikan oleh user1034749.
Untuk operator perpustakaan standard, anda boleh menggunakannya sebagai penunjuk fungsi, walaupun anda perlu merujuk kepada contoh templat masing-masing. Pengkompil memerlukan petunjuk yang mencukupi untuk menyimpulkan templat yang betul. Berikut ialah contoh:
<code class="cpp">#include <iostream> #include <string> using namespace std; template<class Test> Test test_function(Test const &a, Test const &b, Test (*FPtr)(Test const &, Test const &)) { return FPtr(a, b); } int main() { typedef basic_string<char> String; String a("test"), b("test2"); cout << test_function(a, b, &operator+); return 0; }</code>
Dalam contoh ini, operator disediakan sebagai penuding fungsi untuk fungsi_test. Ambil perhatian bahawa jika anda meninggalkan hujah templat untuk test_function, potongan akan gagal dalam beberapa penyusun seperti MSVC 2012.
Atas ialah kandungan terperinci Bolehkah anda mendapatkan penunjuk fungsi kepada operator standard terbina dalam dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!