Heim >Backend-Entwicklung >C++ >Wie funktioniert std::enable_if mit bedingten Rückgabetypen und Vorlagenparametern?
Std::enable_if verstehen
Std::enable_if verstehen erfordert ein Verständnis davon, dass Substitutionsfehler kein Fehler sind.
Definition 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 die Typedef-T-Typdefinition nur ausgelöst wird, wenn bool Cond ist wahr.
Verwendung in bedingten Rückgabetypen
Betrachten Sie das Beispiel:
<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 definiert durch:
<code class="cpp">std::enable_if<std::numeric_limits<T>::is_integer, void>::type</code>
Die Verwendung von enable_if stellt sicher, dass foo nur dann einen gültigen Rückgabetyp hat, wenn is_integer für T wahr ist.
Standardeinstellung des zweiten Vorlagenparameters
Im Beispiel:
<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>
Der zweite Template-Parameter ist standardmäßig auf 0 eingestellt. Dadurch kann foo mit einem einzigen Template-Parameter aufgerufen werden, z.B. foo
Das obige ist der detaillierte Inhalt vonWie funktioniert std::enable_if mit bedingten Rückgabetypen und Vorlagenparametern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!