Kann ich die Spezialisierung auf Klassenvorlagen bestätigen?
Bei der Softwareentwicklung müssen wir aufgrund von Klassenvorlagen häufig feststellen, ob eine bestimmte Klasse spezialisiert ist . Stellen Sie sich das folgende Szenario vor:
Problem:
Angenommen eine Klassenvorlage wie
template <class T> struct A {};
Ist es möglich festzustellen, ob CompareT eine Instanz von A<> ist? ; für jeden Typ *? Zum Beispiel im folgenden Code:
template<class CompareT> void compare(){ // is this A ? cout << is_same< A<*> , CompareT >::value; // A<> ???? } int main(){ compare< A<int> >(); }</p> <p>In diesem Anwendungsfall ist A<int> sollte mit A<> übereinstimmen, was zu einer Ausgabe von 1 führt.</p> <p><strong>Lösung:</strong></p> <p>Mit dem folgenden Code können Sie überprüfen, ob eine Klasse eine spezialisierte Version von ist eine Vorlage:</p> <pre class="brush:php;toolbar:false">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>{}, "");
Durch den Aufruf von is_specialization können Sie feststellen, ob es sich bei einer Klasse um eine Vorlagenspezialisierung handelt, wodurch Sie eine genauere Kontrolle darüber erhalten die Struktur und das Verhalten Ihres Codes.
Das obige ist der detaillierte Inhalt vonKann ich feststellen, ob eine Klasse eine Spezialisierung einer Klassenvorlage ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!