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