Heim >Backend-Entwicklung >C++ >Warum kann C Vorlagenargumente in nicht deduzierbaren Kontexten nicht ableiten?
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
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; };
In diesem Fall sind sowohl TMap
Konsequenzen
Die Beschränkung nicht ableitbarer Kontexte hat wichtige Auswirkungen:
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!