Heim > Backend-Entwicklung > C++ > Wie bestimmt man die Template-Spezialisierung in C?

Wie bestimmt man die Template-Spezialisierung in C?

Mary-Kate Olsen
Freigeben: 2024-11-13 06:25:02
Original
793 Leute haben es durchsucht

How to Determine Template Specialization in C  ?

Bestimmen der Vorlagenspezialisierung

In C ist es häufig erforderlich, festzustellen, ob ein bestimmter Typ eine Spezialisierung einer bestimmten Klassenvorlage ist. Betrachten Sie das folgende Beispiel:

template <class T>
struct A {};
Nach dem Login kopieren

Wie können wir feststellen, ob CompareT ein A<*> ist? für einen Typ * im folgenden Code?

template<class CompareT>
void compare(){
   // is this A ?
   cout << is_same< A<*>, CompareT >::value;     // A<*> ????
}

int main(){
  compare< A<int> >();
}
Nach dem Login kopieren

Zum Beispiel hier A sollte mit A<*> übereinstimmen. und geben Sie 1 aus.

Lösung:

Um dies zu erreichen, können wir eine benutzerdefinierte Metafunktion namens is_specialization verwenden:

template <class T, template <class...> class Template>
struct is_specialization : std::false_type {};

template <template <class...> class Template, class... Args>
struct is_specialization<Template<Args...>, Template> : std::true_type {};
Nach dem Login kopieren

Diese Metafunktion gibt true zurück wenn T eine Spezialisierung von Template ist und andernfalls false. Um die Verwendung zu veranschaulichen:

static_assert(is_specialization<std::vector<int>, std::vector>{}, "");
static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie bestimmt man die Template-Spezialisierung in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage