Pengkhususan templat dan pengkhususan separa templat dalam C++?

WBOY
Lepaskan: 2024-05-08 17:33:01
asal
854 orang telah melayarinya

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> {
  // 特化代码
};
Salin selepas log masuk

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

Output:

Hello
10
Salin selepas log masuk

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> {
  // 偏特化代码
};
Salin selepas log masuk

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

Output:

Hello, 5
10, 10
Salin selepas log masuk

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!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan