Heim > Backend-Entwicklung > C++ > Warum kann C Vorlagenargumente in nicht deduzierbaren Kontexten nicht ableiten?

Warum kann C Vorlagenargumente in nicht deduzierbaren Kontexten nicht ableiten?

Barbara Streisand
Freigeben: 2024-12-26 13:47:10
Original
893 Leute haben es durchsucht

Why Can't C   Deduce Template Arguments in Non-Deducible Contexts?

Warum kann C T in nicht deduzierbaren Kontexten nicht ableiten?

Im angegebenen Codeausschnitt ist eine Vorlagenstruktur TMap definiert mit ein verschachtelter Typ, der die Spezialisierung von std::map unter Verwendung des Vorlagenarguments T darstellt. Der Compiler kann jedoch T in der Funktion nicht ableiten test.

Nicht deduzierbarer Kontext

Der Fehler tritt auf, weil der Code test mit einem Argument aufruft, das den Typ typename TMap::Type& hat, wobei T wird nicht explizit angegeben. Diese Situation wird als nicht deduzierbarer Kontext bezeichnet.

Mehrdeutigkeit in der Typinferenz

In einem nicht deduzierbaren Kontext ist dies der Compiler Das Vorlagenargument kann nicht abgeleitet werden, da der Typ des Arguments T nicht eindeutig bestimmt. Betrachten Sie beispielsweise Folgendes Szenario:

template <>
struct TMap<SomeType> {
  typedef std::map<double, double> Type;
};

template <>
struct TMap<OtherType> {
  typedef std::map<double, double> Type;
};
Nach dem Login kopieren

In diesem Fall sind sowohl TMap::Type als auch TMap::Type identisch mit std::map. Daher kann der Compiler nicht ableiten, ob T SomeType oder OtherType ist.

Konsequenzen

Die Beschränkung nicht ableitbarer Kontexte hat wichtige Auswirkungen:

  • Es verhindert, dass der Compiler Vorlagen implizit basierend auf den übergebenen Argumenttypen spezialisiert Funktionen.
  • Es erfordert eine explizite Ableitung von Vorlagenargumenten oder eine explizite Spezifikation von Vorlagenargumenten, wenn Funktionen mit generischen Typen als Argumente aufgerufen werden.

Abhilfe

Um diese Einschränkung zu mildern, kann man Techniken wie Template-Argumente oder std::is_same_v von C 20 verwenden, um Template-Argumente manuell abzuleiten oder explizit bereitzustellen Vorlagenparameterlisten.

Das obige ist der detaillierte Inhalt vonWarum kann C Vorlagenargumente in nicht deduzierbaren Kontexten nicht ableiten?. 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