„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Kann Metaprogrammierung dabei helfen, Vorlagen basierend auf der String-Konvertierung zu definieren?

Kann Metaprogrammierung dabei helfen, Vorlagen basierend auf der String-Konvertierung zu definieren?

Veröffentlicht am 13.11.2024
Durchsuche:538

Can Metaprogramming Help Define Templates Based on String Conversion?

Metaprogrammierung: Alternative Vorlagenauswahlkriterien für die Funktionsdefinition

Diese Frage untersucht das Konzept der Definition einer Vorlage basierend auf der Konvertierungsfähigkeit eines Typs zu einer Zeichenfolge. Der ursprüngliche Code verwendet das Typmerkmal is_arithmetic, aber der Vorschlag besteht darin, stattdessen ein Kriterium zu verwenden, das auswertet, ob to_string für den Typ definiert ist.

Das Gegenteil dieses Kriteriums, nämlich die Bestimmung, wann to_string nicht definiert ist, erweist sich jedoch herausfordernd. Der folgende Code schlägt fehl:

template enable_if_t

Um dieses Problem zu beheben, schlägt die Antwort die Verwendung des Typmerkmals void_t von Walter Brown vor, das die Erstellung des Folgenden ermöglicht:

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 { };

Dieses Typmerkmal wertet effektiv aus, ob to_string für einen bestimmten Typ definiert ist, und stellt so ein alternatives Vorlagenauswahlkriterium bereit, das genauer mit der ursprünglichen Absicht übereinstimmt.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3