Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah `std::enable_if` membantu mentakrifkan jenis pemulangan fungsi secara bersyarat dan membolehkan resolusi fungsi?

Bagaimanakah `std::enable_if` membantu mentakrifkan jenis pemulangan fungsi secara bersyarat dan membolehkan resolusi fungsi?

Patricia Arquette
Lepaskan: 2024-11-08 19:57:01
asal
521 orang telah melayarinya

How does `std::enable_if` help conditionally define function return types and enable function resolution?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

The nilai lalai (0) untuk parameter templat kedua disediakan semata-mata untuk membolehkan panggilan foo(1); tanpanya, fungsi itu memerlukan dua parameter templat dan bukannya satu.

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::is_integer>. Dalam versi Visual Studio yang lebih lama, parameter templat lalai tidak disokong, jadi std::enable_if hanya boleh digunakan pada pemulangan fungsi, seperti yang dilihat dalam contoh "std::numeric_limits as a Condition".

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan