Heim >Backend-Entwicklung >C++ >Wie bestimmt man die Template-Spezialisierung in C?
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
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!