Rumah >pembangunan bahagian belakang >C++ >## Bolehkah Anda Dapatkan Penunjuk Fungsi untuk Operator C Terbina dalam?

## Bolehkah Anda Dapatkan Penunjuk Fungsi untuk Operator C Terbina dalam?

DDD
DDDasal
2024-10-25 10:20:30658semak imbas

## Can You Get Function Pointers for Built-in C   Operators?

Adakah Kemungkinan Mendapatkan Penunjuk Fungsi Operator Standard Terbina dalam?

Pengenalan

Penunjuk fungsi menyediakan cara untuk merujuk kepada tertentu fungsi operator. Walau bagaimanapun, untuk pengendali standard terbina dalam, pendekatan ini mungkin tidak mudah. Artikel ini menyelidiki sebab di sebalik pengehadan ini dan meneroka penyelesaian alternatif untuk mencapai kefungsian yang serupa.

Mengapa Penunjuk Fungsi Tidak Tersedia untuk Operator Terbina dalam

Mengikut Piawaian C (13.6/ 1), pengendali terbina dalam bukan fungsi pengendali biasa dan oleh itu tidak boleh mempunyai penunjuk fungsi yang menghalakannya. Mereka semata-mata mengambil bahagian dalam resolusi beban lampau tanpa melaksanakan sebarang tujuan lain.

Alternatif: Menggunakan Objek Fungsi

Untuk mengatasi had ini, C Standard memperkenalkan objek fungsi, yang menyediakan kefungsian analog kepada terbina dalam operator melalui objek templat. Sebagai contoh, untuk perbandingan, objek fungsi seperti equal_to, greater, dan less_equal ditakrifkan. Objek ini boleh digunakan sebagai hujah penuding fungsi.

Contoh

Dalam coretan kod yang disediakan, matlamatnya adalah untuk membandingkan dua integer dalam kelas templat. Menggunakan teknik objek fungsi, ia boleh dicapai seperti berikut:

<code class="cpp">class MyAction {
  bool operator()() {
    if (fnCompare_(arg0_, arg1_)) {
      // do this
    } else {
      // do s.th. else
    }
  }
};</code>

Di sini, fnCompare_ boleh menjadi objek fungsi seperti std::equal_to untuk melakukan perbandingan.

Operator Jenis Kelas Standard

Selain objek fungsi, pengendali perpustakaan standard juga boleh digunakan sebagai penunjuk fungsi. Walau bagaimanapun, contoh templat masing-masing mesti dirujuk. Contohnya:

<code class="cpp">std::basic_string<char> a("test"), b("test2");
std::cout << test_function<std::basic_string<char>>(a, b, &std::operator+);</code>

Kesimpulan

Walaupun penunjuk fungsi tidak tersedia secara langsung untuk operator standard terbina dalam, penyelesaian alternatif yang disediakan oleh objek fungsi dan operator jenis kelas standard membenarkan kefungsian yang setara. Alternatif ini membolehkan penggunaan operator standard tertentu sebagai penunjuk fungsi, menangani had yang dibentangkan oleh operator terbina dalam.

Atas ialah kandungan terperinci ## Bolehkah Anda Dapatkan Penunjuk Fungsi untuk Operator C Terbina dalam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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