Rumah >pembangunan bahagian belakang >C++ >Adakah Kelas Saya Mempunyai Fungsi Ahli `serialize` Tertentu?
Menggunakan C 11 untuk Menentukan Kehadiran Fungsi Ahli dengan Tandatangan Khusus
Dalam C , pembangun sering menghadapi keperluan untuk mengesahkan sama ada kelas memiliki fungsi ahli dengan tandatangan tertentu. Walaupun tidak ditangani secara langsung dalam dokumentasi yang dirujuk, artikel ini membentangkan penyelesaian berasaskan templat yang memenuhi keperluan ini.
Teknik yang dicadangkan bergantung pada ciri C 11, memastikan ketepatannya walaupun untuk fungsi yang diwarisi. Kaedah ini berkisar pada ujian untuk kewujudan fungsi bernama "serialize."
Pengkhususan Templat untuk Pengesanan Fungsi
Inti penyelesaian terletak pada pengkhususan templat bernama "has_serialize." Parameter templat ini ialah kelas dan tandatangan fungsi yang diwakili sebagai "Ret(Args...)". Pengkhususan cuba memanggil fungsi "serialize" pada contoh kelas dan menyemak sama ada jenis pemulangan sepadan dengan tandatangan yang disediakan.
Jika fungsi itu wujud dan jenis pemulangannya sejajar dengan tandatangan yang ditentukan, "has_serialize " pengkhususan templat mengembalikan benar. Jika tidak, ia mengembalikan palsu.
Contoh Penggunaan
Untuk menggambarkan penggunaan penyelesaian ini, pertimbangkan kod berikut:
struct X { int serialize(const std::string&); }; struct Y : X {}; std::cout << has_serialize<Y, int(const std::string&)>::value; // will print 1
Dalam ini contoh, templat "has_serialize" digunakan untuk menentukan sama ada kelas "Y" mempunyai fungsi "serialize" yang mengambil rentetan sebagai hujah dan mengembalikan integer. Memandangkan "Y" mewarisi fungsi ini daripada "X", hasilnya adalah benar, menghasilkan output 1.
Atas ialah kandungan terperinci Adakah Kelas Saya Mempunyai Fungsi Ahli `serialize` Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!