Problem:
Bestimmen, welche Version eines Klassenmitglieds Das Aufrufen einer Funktion basierend auf dem Vorlagenparameter der Klasse kann eine Herausforderung sein. Die Verwendung von „enable_if“ kann eine Lösung sein, es können jedoch Fehler wie „kein Typ namens „type“ in „struct std::enable_if““ auftreten.
Lösung:
Das Problem liegt in der Ersetzung von Vorlagenargumenten. enable_if beseitigt Überladungen, die zu Fehlern beim Ersetzen von Vorlagenargumenten führen. Im bereitgestellten Code erfolgt keine Ersetzung, da T zum Zeitpunkt der Instanziierung der Mitgliedsfunktion bereits bekannt ist.
Um dieses Problem zu beheben, erstellen Sie ein Dummy-Vorlagenargument mit der Standardeinstellung T und verwenden Sie dieses für SFINAE (Substitution Failure Is Not). Ein Fehler). Ersetzen Sie den problematischen Code durch Folgendes:
<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>
Hinweis:
Um zu verhindern, dass Benutzer explizit Vorlagenargumente angeben und möglicherweise falsche Ergebnisse erhalten, können Sie einen statischen Code hinzufügen Behauptung an die Mitgliedsfunktionen, wie im folgenden Beispiel zu sehen:
<code class="cpp">template<typename T> struct Point { template<typename... Dummy, typename U = T> typename std::enable_if<std::is_same<U, int>::value>::type MyFunction() { static_assert(sizeof...(Dummy)==0, "Do not specify template arguments!"); std::cout << "T is int." << std::endl; } template<typename... Dummy, typename U = T> typename std::enable_if<std::is_same<U, float>::value>::type MyFunction() { static_assert(sizeof...(Dummy)==0, "Do not specify template arguments!"); std::cout << "T is not int." << std::endl; } };</code>
Das obige ist der detaillierte Inhalt vonSo wählen Sie eine Funktion basierend auf Vorlagenparametern mit „enable_if' aus: Warum tritt der Fehler „Kein Typ namens „Typ' in „Struktur std::enable_if'' auf und wie kann er behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!