Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengkhususan templat dan pengkhususan separa templat dalam C++?

Pengkhususan templat dan pengkhususan separa templat dalam C++?

WBOY
WBOYasal
2024-05-08 17:33:01858semak imbas

Pengkhususan templat dan pengkhususan separa ialah mekanisme unik dalam C++. Pengkhususan templat menyediakan pelaksanaan khusus untuk jenis parameter templat tertentu, manakala pengkhususan separa templat membenarkan templat ditaip berdasarkan beberapa parameter templat, menjadikan penggunaannya lebih fleksibel. Pengkhususan templat menggunakan sintaks templat manakala pengkhususan separa templat menggunakan templat

Pengkhususan templat dan pengkhususan separa templat dalam C++?

Pengkhususan templat dan pengkhususan separa templat dalam C++

Pengkhususan templat

Pengkhususan templat merujuk kepada menyediakan pelaksanaan templat khusus untuk jenis parameter templat tertentu. Sintaksnya adalah seperti berikut:

template <>
class MyClass<MyType> {
  // 特化代码
};

Contoh:

template <typename T>
class MyClass {
  T value;

public:
  MyClass(T v) : value(v) {}
  T getValue() { return value; }
};

template <>
class MyClass<int> {
  int value;

public:
  MyClass(int v) : value(v) {}
  int getValue() { return value * 2; }
};

int main() {
  MyClass<string> strObj("Hello");
  cout << strObj.getValue() << endl;

  MyClass<int> intObj(5);
  cout << intObj.getValue() << endl;
}

Output:

Hello
10

Pengkhususan separa templat

Pengkhususan separa templat berdasarkan jenis templat yang membolehkan pengkhususan separa templat berdasarkan jenis templat parameter templat. Sintaksnya adalah seperti berikut:

template <typename T, typename U>
class MyClass {
  // ...
};

template <typename T>
class MyClass<T, T> {
  // 偏特化代码
};

Contoh:

template <typename T, typename U>
class MyClass {
  T value1;
  U value2;

public:
  MyClass(T v1, U v2) : value1(v1), value2(v2) {}
  T getValue1() { return value1; }
  U getValue2() { return value2; }
};

template <typename T>
class MyClass<T, T> {
public:
  MyClass(T v) : value1(v), value2(v) {}
  T getValue1() { return value1; }
  T getValue2() { return value2; }
};

int main() {
  MyClass<string, int> strIntObj("Hello", 5);
  cout << strIntObj.getValue1() << ", " << strIntObj.getValue2() << endl;

  MyClass<int> intObj(10);
  cout << intObj.getValue1() << ", " << intObj.getValue2() << endl;
}

Output:

Hello, 5
10, 10

Atas ialah kandungan terperinci Pengkhususan templat dan pengkhususan separa templat dalam C++?. 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