Ist eine Klasse eine Vorlagenspezialisierung?
In C kann es nützlich sein, festzustellen, ob ein bestimmter Typ eine Spezialisierung eines bestimmten Typs ist Klassenvorlage. Betrachten Sie beispielsweise den folgenden Code:
template<class T> struct A {}; template<class CompareT> void compare() { // is this A? cout << is_same< A<*> , CompareT >::value << endl; // A<?> ???? }
Wie können wir anhand des obigen Codes überprüfen, ob CompareT ein A<> ist? für einen Typ *?
Lösung:
Mit der Vorlagenmetafunktion is_specialization können Sie überprüfen, ob ein Typ eine Spezialisierung einer Klassenvorlage ist. Hier ist ein Beispiel:
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>{}, "");
Im obigen Beispiel benötigt is_specialization zwei Argumente: T und Template. Wenn T eine Spezialisierung von Template ist, is_specialization
Das obige ist der detaillierte Inhalt vonIst eine Klasse eine Template-Spezialisierung in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!