Bagaimana untuk Menggunakan enable_if untuk Memilih Fungsi Ahli Berdasarkan Argumen Templat?

Linda Hamilton
Lepaskan: 2024-10-26 12:44:29
asal
288 orang telah melayarinya

How to Use enable_if to Select Member Functions Based on Template Arguments?

Memilih Fungsi Ahli Menggunakan Syarat enable_if yang berbeza

Metafungsi enable_if digunakan untuk menentukan parameter fungsi templat dan memilih fungsi ahli yang sesuai berdasarkannya . Pertimbangkan kod berikut:

<code class="cpp">template<typename T>
struct Point
{
  // Check if T is int and call MyFunction for int
  void MyFunction(typename std::enable_if<std::is_same<T, int>::value, T &>::type* = 0)
  {
    std::cout << "T is int." << std::endl;
  }

  // Check if T is not int and call MyFunction for non-int
  void MyFunction(typename std::enable_if<!std::is_same<T, int>::value, float &>::type* = 0)
  {
    std::cout << "T is not int." << std::endl;
  }
};</code>
Salin selepas log masuk

Walau bagaimanapun, kod ini mungkin menyebabkan ralat pengkompil yang menunjukkan bahawa "tiada jenis bernama 'type' dalam 'struct std::enable_if'".

Memahami enable_if

enable_if memastikan bahawa hanya lebihan fungsi yang berdaya maju dipertimbangkan semasa resolusi beban lampau. Jika penggantian hujah templat gagal, lebihan beban itu dialih keluar daripada set calon.

Dalam contoh di atas, hujah templat T sudah diketahui semasa membuat seketika fungsi ahli. Untuk melaksanakan gelagat yang diingini, kita boleh mencipta hujah templat tiruan yang lalai kepada T dan melaksanakan SFINAE menggunakannya:

<code class="cpp">template<typename T>
struct Point
{
  template<typename U = T>
  typename std::enable_if<std::is_same<U, int>::value>::type
    MyFunction()
  {
    std::cout << "T is int." << std::endl;
  }

  template<typename U = T>
  typename std::enable_if<std::is_same<U, float>::value>::type
    MyFunction()
  {
    std::cout << "T is not int." << std::endl;
  }
};</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan enable_if untuk Memilih Fungsi Ahli Berdasarkan Argumen Templat?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!