Heim > Backend-Entwicklung > C++ > Hauptteil

Wie können Sie Vorlagen basierend auf der Überlastungsauflösung spezialisieren?

Susan Sarandon
Freigeben: 2024-11-10 12:24:02
Original
975 Leute haben es durchsucht

How Can You Specialize Templates Based on Overload Resolution?

Metaprogrammierung: Spezialisierung basierend auf Überlastungsauflösung

In der Metaprogrammierung ist es üblich, Vorlagen basierend auf Typeigenschaften zu definieren. Allerdings entsteht eine Herausforderung, wenn versucht wird, zwischen zwei Vorlagendefinitionen auszuwählen, je nachdem, ob eine bestimmte Überladung für einen bestimmten Typ definiert ist.

Walter Brown führt einen nützlichen Typ ein, void_t, der void zurückgibt, wenn keine Vorlagenargumente bereitgestellt werden . Aufbauend auf diesem Konzept können wir ein Typmerkmal definieren, um das Vorhandensein der std::to_string-Überladung für einen bestimmten Typ zu überprüfen:

template<typename T, typename = void>
struct has_to_string
: std::false_type { };

template<typename T>
struct has_to_string<T, 
    void_t<decltype(std::to_string(std::declval<T>()))>>
: std::true_type { };
Nach dem Login kopieren

Mit diesem Typmerkmal können wir jetzt ganz einfach eine Vorlage schreiben, die ist auf die Überladungsauflösung für std::to_string:

template<typename T>
enable_if_t<has_to_string<T>::value, string> stringify(T t){
    return std::to_string(t);
}

template<typename T>
enable_if_t<!has_to_string<T>::value, string> stringify(T t){
    return static_cast<ostringstream&>(ostringstream() << t).str();
}
Nach dem Login kopieren
spezialisiert

Das obige ist der detaillierte Inhalt vonWie können Sie Vorlagen basierend auf der Überlastungsauflösung spezialisieren?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage