Bagaimana std::enable_if Memudahkan Resolusi Fungsi Bersyarat
Memahami Kegagalan Penggantian Bukan Ralat adalah penting untuk memahami 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>
Kuncinya ialah jenis hanya ditakrifkan apabila keadaannya benar.
Pertimbangkan fungsi 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>
std::enable_if digunakan untuk mentakrifkan jenis pemulangan fungsi secara bersyarat, menyebabkan ralat kompilasi jika syarat itu palsu.
Dalam coretan kod:
<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>
The nilai lalai (0) untuk parameter templat kedua disediakan semata-mata untuk membolehkan panggilan foo
Nota: Dalam C 14, enable_if_t ialah jenis yang ditentukan yang harus digunakan untuk kejelasan. Oleh itu, jenis pulangan boleh dipekatkan kepada std::enable_if_t
Atas ialah kandungan terperinci Bagaimanakah `std::enable_if` membantu mentakrifkan jenis pemulangan fungsi secara bersyarat dan membolehkan resolusi fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!