Template-Spezialisierung und partielle Spezialisierung sind einzigartige Mechanismen in C++. Vorlagenspezialisierungen stellen spezifische Implementierungen für bestimmte Arten von Vorlagenparametern bereit, während teilweise Vorlagenspezialisierungen die Typisierung von Vorlagen auf der Grundlage einiger Vorlagenparameter ermöglichen, wodurch ihre Verwendung flexibler wird. Vorlagenspezialisierungen verwenden die Syntax template, während Vorlagenspezialisierungen die Syntax template
Template-Spezialisierung und Template-Teilspezialisierung in C++
Template-Spezialisierung
Template-Spezialisierung bezieht sich auf die explizite Bereitstellung einer bestimmten Template-Implementierung für einen bestimmten Typ von Template-Parametern. Die Syntax lautet wie folgt:
template <> class MyClass<MyType> { // 特化代码 };
Beispiel:
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; }
Ausgabe:
Hello 10
Partielle Vorlagenspezialisierung
Eine teilweise Vorlagenspezialisierung ist eine spezielle Vorlagenspezialisierung, mit der Vorlagen basierend auf einem Teil der eingegeben werden können Vorlagenparameter. Die Syntax lautet wie folgt:
template <typename T, typename U> class MyClass { // ... }; template <typename T> class MyClass<T, T> { // 偏特化代码 };
Beispiel:
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; }
Ausgabe:
Hello, 5 10, 10
Das obige ist der detaillierte Inhalt vonTemplate-Spezialisierung und Template-Teilspezialisierung in C++?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!