Heim >Backend-Entwicklung >C++ >Wie verwende ich „enable_if', um Mitgliedsfunktionen basierend auf Vorlagenargumenten auszuwählen?
Auswählen einer Mitgliedsfunktion unter Verwendung verschiedener „enable_if“-Bedingungen
Die „enable_if“-Metafunktion wird verwendet, um Vorlagenfunktionsparameter anzugeben und darauf basierend geeignete Mitgliedsfunktionen auszuwählen . Betrachten Sie den folgenden Code:
<code class="cpp">template<typename T> struct Point { // Check if T is int and call MyFunction for int void MyFunction(typename std::enable_if<std::is_same<T, int>::value, T &>::type* = 0) { std::cout << "T is int." << std::endl; } // Check if T is not int and call MyFunction for non-int void MyFunction(typename std::enable_if<!std::is_same<T, int>::value, float &>::type* = 0) { std::cout << "T is not int." << std::endl; } };</code>
Dieser Code kann jedoch Compilerfehler verursachen, die darauf hinweisen, dass „kein Typ namens ‚type‘ in ‚struct std::enable_if‘“ vorhanden ist.
Das Verständnis von „enable_if“
enable_if stellt sicher, dass bei der Überladungsauflösung nur realisierbare Funktionsüberladungen berücksichtigt werden. Wenn die Ersetzung eines Vorlagenarguments fehlschlägt, wird diese Überladung aus dem Kandidatensatz entfernt.
Im obigen Beispiel ist das Vorlagenargument T beim Instanziieren der Mitgliedsfunktionen bereits bekannt. Um das gewünschte Verhalten zu implementieren, können wir ein Dummy-Vorlagenargument mit der Standardeinstellung T erstellen und damit SFINAE ausführen:
<code class="cpp">template<typename T> struct Point { template<typename U = T> typename std::enable_if<std::is_same<U, int>::value>::type MyFunction() { std::cout << "T is int." << std::endl; } template<typename U = T> typename std::enable_if<std::is_same<U, float>::value>::type MyFunction() { std::cout << "T is not int." << std::endl; } };</code>
Das obige ist der detaillierte Inhalt vonWie verwende ich „enable_if', um Mitgliedsfunktionen basierend auf Vorlagenargumenten auszuwählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!