Heim > Backend-Entwicklung > C++ > Hauptteil

Wie hilft „std::enable_if' dabei, Funktionsrückgabetypen bedingt zu definieren und die Funktionsauflösung zu ermöglichen?

Patricia Arquette
Freigeben: 2024-11-08 19:57:01
Original
440 Leute haben es durchsucht

How does `std::enable_if` help conditionally define function return types and enable function resolution?

Wie std::enable_if die Auflösung bedingter Funktionen erleichtert

Das Verständnis, dass Substitutionsfehler kein Fehler sind, ist entscheidend für das Verständnis 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>
Nach dem Login kopieren

Der Schlüssel liegt darin, dass der Typ nur definiert wird, wenn die Bedingung wahr ist.

Betrachten Sie die folgende Funktion:

<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>
Nach dem Login kopieren

std::enable_if wird verwendet, um den Rückgabetyp der Funktion bedingt zu definieren, was zu einem Kompilierungsfehler führt, wenn die Bedingung erfüllt ist false.

Im Codeausschnitt:

<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>
Nach dem Login kopieren

Der Standardwert (0) für den zweiten Vorlagenparameter wird ausschließlich bereitgestellt, um den Aufruf foo(1); Ohne sie würde die Funktion zwei Vorlagenparameter statt einem erfordern.

Hinweis: In C 14 ist „enable_if_t“ ein definierter Typ, der der Übersichtlichkeit halber verwendet werden sollte. Somit kann der Rückgabetyp auf std::enable_if_t::is_integer> komprimiert werden. In älteren Versionen von Visual Studio werden Standardvorlagenparameter nicht unterstützt, daher kann std::enable_if nur für die Funktionsrückgabe verwendet werden, wie im Beispiel „std::numeric_limits als Bedingung“ zu sehen ist.

Das obige ist der detaillierte Inhalt vonWie hilft „std::enable_if' dabei, Funktionsrückgabetypen bedingt zu definieren und die Funktionsauflösung zu ermöglichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage