Heim > Backend-Entwicklung > C++ > Hauptteil

Template-Spezialisierung und Template-Teilspezialisierung in C++?

WBOY
Freigeben: 2024-05-08 17:33:01
Original
849 Leute haben es durchsucht

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 verwenden.

Template-Spezialisierung und Template-Teilspezialisierung in C++?

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> {
  // 特化代码
};
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ausgabe:

Hello
10
Nach dem Login kopieren

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> {
  // 偏特化代码
};
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ausgabe:

Hello, 5
10, 10
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage