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:
templateenable_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.
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