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

Wie bestimmt man die Template-Spezialisierung in C?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-13 06:25:02767Durchsuche

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

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> >();
}

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

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>{}, "");

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!

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