Heim > Backend-Entwicklung > C++ > Hauptteil

Warum führt die Verwendung von „std::enable_if_t' mit Standardwerten zu einem Neudefinitionsfehler?

DDD
Freigeben: 2024-11-12 11:24:02
Original
259 Leute haben es durchsucht

Why Does Using `std::enable_if_t` With Default Values Result in a Redefinition Error?

Neudefinitionsproblem mit enable_if_t-Vorlagenargumenten

Im bereitgestellten Code der Versuch, die Typbeschränkung std::enable_if mithilfe der neuen Syntax zu konvertieren (typename = std::enable_if_t...) führt zu einem Neudefinitionsfehler. Dies liegt daran, dass die beiden Vorlagenfunktionen:

template<typename T, typename = std::enable_if_t<std::is_same<int, T>::value>>>
void g() { }
Nach dem Login kopieren

und

template<typename T, typename = std::enable_if_t<std::is_same<double, T>::value>>>
void g() { }
Nach dem Login kopieren

beide vom Typ templatevoid() sind. Die Tatsache, dass das zweite Typargument unterschiedliche Standardwerte hat, ist irrelevant, da der Compiler die beiden Vorlagen als identisch betrachtet.

Um dieses Problem zu beheben, müssen die Standardwerte aus der Einschränkung „enable_if_t“ entfernt werden. Daraus ergibt sich folgender Code:

template<typename T, std::enable_if_t<std::is_same<int, T>::value, int>*>
void g() { }

template<typename T, std::enable_if_t<std::is_same<double, T>::value, int>*>
void g() { }
Nach dem Login kopieren

In diesem Fall ist das zweite Typargument nun ein Zeiger, dessen Typ vom ersten abhängig ist. Der Compiler kann den Typ T ersetzen, um festzustellen, ob ein Konflikt zwischen den beiden Vorlagen besteht, und er löst auf, dass kein Konflikt vorliegt.

Das obige ist der detaillierte Inhalt vonWarum führt die Verwendung von „std::enable_if_t' mit Standardwerten zu einem Neudefinitionsfehler?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage