Memahami std::enable_if
Memahami std::enable_if memerlukan pemahaman tentang Kegagalan Penggantian Bukan Satu Ralat.
Takrifan std::enable_if
std::enable_if ialah templat khusus yang ditakrifkan sebagai:
<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, definisi jenis T typedef hanya dicetuskan apabila bool Cond adalah benar.
Penggunaan dalam Jenis Pulangan Bersyarat
Pertimbangkan contoh:
<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 pemulangan ditakrifkan oleh:
<code class="cpp">std::enable_if<std::numeric_limits<T>::is_integer, void>::type</code>
Penggunaan enable_if memastikan bahawa foo mempunyai jenis pulangan yang sah hanya jika is_integer adalah benar untuk T.
Menjalankan Lalai Parameter Templat Kedua
Dalam contoh:
<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>
Parameter templat kedua ditetapkan secara lalai kepada 0. Ini membolehkan foo dipanggil dengan satu parameter templat, mis. foo
Atas ialah kandungan terperinci Bagaimanakah std::enable_if Berfungsi dengan Jenis Pulangan Bersyarat dan Parameter Templat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!