Heim > Backend-Entwicklung > C++ > Kann ich feststellen, ob eine Klasse eine Spezialisierung einer Klassenvorlage ist?

Kann ich feststellen, ob eine Klasse eine Spezialisierung einer Klassenvorlage ist?

DDD
Freigeben: 2024-11-12 11:52:02
Original
724 Leute haben es durchsucht

 Can I Determine if a Class Is a Specialization of a Class Template?

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 {};
Nach dem Login kopieren

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>{}, "");
Nach dem Login kopieren

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage