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 an 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:
<code class="cpp">template<bool Cond, class T = void> struct enable_if {}; template<class T> struct enable_if<true, T> { typedef T type; };</code>
Entscheidend ist, dass der Typalias typedef T type nur definiert wird, wenn Cond wahr ist.
Enthüllung der Verwendung
Beachten Sie die folgende Deklaration:
<code class="cpp">template<typename T> typename std::enable_if<std::numeric_limits<T>::is_integer, void>::type foo(const T &bar) { isInt(bar); }</code>
Hier wird der Rückgabetyp von foo durch std::enable_if
Klarstellung des zweiten Arguments
In der Notation:
<code class="cpp">template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0> void foo(const T& bar) { isInt(); }</code>
= 0 wird als Standard für den zweiten Vorlagenparameter verwendet. Dadurch können beide Optionen mit foo
Bemerkenswerte Details
Das obige ist der detaillierte Inhalt vonWie funktioniert „std::enable_if': Die Geheimnisse seiner Implementierung und Verwendung aufdecken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!