Memahami std::enable_if: Mentafsir Tujuan dan Pelaksanaannya
Walaupun sifat std::enable_if difahami dalam konteks tertentu, ia selok-belok, terutamanya hujah kedua dan tugasan kepada std::enable_if dalam pernyataan templat, kekal misteri. Menggali lebih mendalam tentang cara kerjanya akan membongkar misteri ini.
Kepentingan std::enable_if
std::enable_if ialah templat khusus yang ditakrifkan seperti berikut:
<code class="cpp">template<bool Cond, class T = void> struct enable_if {}; template<class T> struct enable_if<true, T> { typedef T type; };</code>
Yang penting, jenis alias typedef jenis T hanya ditakrifkan apabila Cond adalah benar.
Menyingkap Penggunaan
Pertimbangkan pengisytiharan berikut:
<code class="cpp">template<typename T> typename std::enable_if<std::numeric_limits<T>::is_integer, void>::type foo(const T &bar) { isInt(bar); }</code>
Di sini, jenis kembalian foo ditakrifkan oleh std::enable_if
Menjelaskan Argumen Kedua
Dalam tatatanda:
<code class="cpp">template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0> void foo(const T& bar) { isInt(); }</code>
= 0 digunakan untuk lalai parameter templat kedua. Ini membenarkan kedua-dua pilihan digunakan menggunakan foo
Butiran Yang Perlu Diperhatikan
Atas ialah kandungan terperinci Bagaimanakah `std::enable_if` Berfungsi: Membongkar Misteri Pelaksanaan dan Penggunaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!