Std::enable_if verstehen: Zweck und Implementierung entschlüsseln
Während die Natur von std::enable_if in bestimmten Kontexten verstanden wird, ist es Feinheiten, insbesondere das zweite Argument und die Zuweisung zu std::enable_if innerhalb der Template-Anweisung, bleiben rätselhaft. Ein tieferes Eintauchen in seine Funktionsweise wird diese Geheimnisse lüften.
Das Wesentliche von std::enable_if
std::enable_if ist eine spezielle Vorlage, die wie folgt definiert ist:
template struct enable_if {};
template struct enable_if { typedef T type; };
Entscheidend ist, dass der Typalias typedef T-Typ nur definiert wird, wenn Cond wahr ist.
Enthüllung der Verwendung
Bedenken Sie die folgende Deklaration:
template
typename std::enable_if<:numeric_limits>::is_integer, void>::type foo(const T &bar) { isInt(bar); }
Hier wird der Rückgabetyp von foo durch std::enable_if<:numeric_limits>::is_integer, void>::type definiert. Da std::numeric_limits
Klarstellung des zweiten Arguments
In der Notation:
template::value, int>::type = 0>
void foo(const T& bar) { isInt(); }
Der Wert = 0 wird als Standard für den zweiten Vorlagenparameter verwendet. Dadurch können beide Optionen mit foo
Bemerkenswerte Details
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