Heim > Backend-Entwicklung > C++ > Wie kann festgestellt werden, ob eine Klasse eine Spezialisierung einer Klassenvorlage in C ist?

Wie kann festgestellt werden, ob eine Klasse eine Spezialisierung einer Klassenvorlage in C ist?

Barbara Streisand
Freigeben: 2024-11-17 18:56:02
Original
223 Leute haben es durchsucht

How to Determine if a Class is a Specialization of a Class Template in C  ?

Vorlagenspezialisierungen identifizieren

In C ist es manchmal notwendig zu bestimmen, ob eine bestimmte Klasse eine Spezialisierung einer bestimmten Klassenvorlage ist. Betrachten Sie beispielsweise die folgende Klassenvorlage:

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

Angenommen, wir haben einen Typ CompareT. Wie können wir überprüfen, ob es sich um ein A<> handelt? für irgendeinen Typ ? Betrachten Sie das folgende Beispiel:

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

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

In diesem Beispiel erwarten wir A um mit A<*> übereinzustimmen, was zu einer Druckanweisung von 1 führt.

Lösung:

Ein Ansatz zur Lösung dieses Problems besteht darin, Vorlagen-Metaprogrammierung zu verwenden. Hier ist ein Snippet, mit dem Sie die gewünschte Vorlage angeben können, mit der abgeglichen werden soll:

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 {};

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

Diese Lösung bietet eine bequeme Möglichkeit zu überprüfen, ob ein bestimmter Typ tatsächlich eine Spezialisierung einer bestimmten Klassenvorlage ist.

Das obige ist der detaillierte Inhalt vonWie kann festgestellt werden, ob eine Klasse eine Spezialisierung einer Klassenvorlage in C ist?. 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