Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menggunakan enable_if untuk Memilih Fungsi Ahli Berdasarkan Argumen Templat?

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

Linda Hamilton
Linda Hamiltonasal
2024-10-26 12:44:29360semak imbas

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>

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>

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!

Kenyataan:
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