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
777 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!

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