Heim  >  Artikel  >  Backend-Entwicklung  >  Template-Spezialisierung und Template-Teilspezialisierung in C++?

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

WBOY
WBOYOriginal
2024-05-08 17:33:01798Durchsuche

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

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!

Stellungnahme:
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