Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Sekiranya Anda Mengelakkan `std::enable_if` dalam Tandatangan Fungsi?

Sekiranya Anda Mengelakkan `std::enable_if` dalam Tandatangan Fungsi?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 05:57:30930semak imbas

Should You Avoid `std::enable_if` in Function Signatures?

Kerosakan Prosedur: Mengelakkan std::enable_if dalam Fungsi Tandatangan

Buku Scott Meyers yang akan datang, EC 11, menasihati mengelakkan std::enable_if dalam tandatangan fungsi. Walaupun serba boleh dalam mengalih keluar fungsi atau kelas secara bersyarat daripada resolusi beban lampau, had tertentu dan isu kebolehbacaan memerlukan pertimbangan semula penggunaannya.

Kaedah Menggunakan std::enable_if dalam Tandatangan Fungsi

Fungsi Parameter:

<code class="cpp">template<typename T>
struct Check1
{
   template<typename U = T>
   U read(typename std::enable_if<  // Option 1: As function parameter
          std::is_same<U, int>::value >::type* = 0) { return 42; }
};</code>

Parameter Templat:

<code class="cpp">template<typename T>
struct Check2
{
   template<typename U = T, typename std::enable_if<  // Option 2: As template parameter
            std::is_same<U, int>::value, int >::type = 0>
   U read() { return 42; }
};</code>

Jenis Pemulangan:

<code class="cpp">template<typename T>
struct Check3
{
   template<typename U = T>
   typename std::enable_if<std::is_same<U, int>::value, U>::type read() {  // Option 3: As return type
      return 42;
   }
};</code>

Pendekatan Disyorkan: Peletakan dalam Parameter Templat

Penyelesaian optimum melibatkan meletakkan enable_if dalam parameter templat. Pendekatan ini menawarkan beberapa kelebihan:

Peningkatan Kebolehbacaan:
Penggunaan enable_if diasingkan daripada jenis pemulangan/hujah, meningkatkan kejelasan dan mengurangkan kekusutan.

Kebolehgunaan Universal:
Tidak seperti pilihan lain, peletakan parameter templat terpakai kepada pembina dan pengendali tanpa hujah tambahan.

Pengecualian Jenis Pulangan:
Sambil "Elakkan std::enable_if dalam tandatangan fungsi" terutamanya menangani penggunaannya dalam tandatangan fungsi biasa, ia digunakan untuk mengembalikan jenis dalam pengkhususan templat. Kebimbangan berpunca daripada isu kebolehbacaan apabila menggabungkan enable_if dengan jenis pemulangan.

Fungsi Ahli vs. Bukan Ahli:
Prinsip ini berlaku untuk kedua-dua templat fungsi ahli dan bukan ahli.

Atas ialah kandungan terperinci Sekiranya Anda Mengelakkan `std::enable_if` dalam Tandatangan Fungsi?. 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