Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah `std::enable_if` Berfungsi: Membongkar Misteri Pelaksanaan dan Penggunaannya?

Bagaimanakah `std::enable_if` Berfungsi: Membongkar Misteri Pelaksanaan dan Penggunaannya?

Barbara Streisand
Lepaskan: 2024-11-05 07:52:02
asal
806 orang telah melayarinya

How Does `std::enable_if` Work: Unraveling the Mysteries of Its Implementation and Usage?

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

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

Di sini, jenis kembalian foo ditakrifkan oleh std::enable_if::is_integer, void>::type. Memandangkan std::numeric_limits::is_integer ialah keadaan boolean, jenis pulangan ini hanya akan ditakrifkan jika keadaan itu benar.

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

= 0 digunakan untuk lalai parameter templat kedua. Ini membenarkan kedua-dua pilihan digunakan menggunakan foo(1), berbanding dengan memerlukan dua parameter templat jika parameter std::enable_if tidak lalai.

Butiran Yang Perlu Diperhatikan

  • Menaip nama taip std::enable_if::type meningkatkan kejelasan.
  • Dalam C 14, enable_if_t ialah jenis yang ditetapkan yang harus digunakan untuk jenis pulangan, memudahkannya kepada std::enable_if_t.
  • Untuk versi Visual Studio sebelum 2013, hanya jenis return boleh menggunakan enable_if.

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!

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