Heim >Backend-Entwicklung >C++ >Warum schlägt die Ableitung des Vorlagentyps fehl, wenn von einem Elementtyp abgeleitet wird?
Abzugsfehler bei der Vorlagentypinferenz
Beim Versuch, Vorlagenargumente von einem Typmitglied abzuleiten, ist es wichtig sicherzustellen, dass der Kontext ableitbar ist. Im angegebenen Code tritt der Fehler innerhalb der Testfunktion auf, wenn der Compiler versucht, das Vorlagenargument T aus dem Typnamen TMap
Dieser Fehler ist auf das Konzept des „nicht ableitbaren Kontexts“ zurückzuführen ." In diesem Fall hat der Elementtyp „Type“ des Vorlagentyps TMap
Betrachten Sie eine hypothetische Spezialisierung von TMap:
template <> struct TMap<SomeType> { typedef std::map<double, double> Type; };
Wenn der Compiler T aus TMap
Weitere Spezialisierung von TMap:
template <> struct TMap<OtherType> { typedef std::map<double, double> Type; };
Die Situation verschlimmert sich, da nun Folgendes gilt:
Angesichts dieser Mehrdeutigkeit kann der Compiler nicht bestimmen, ob T SomeType oder OtherType ist. Es kann auch nicht die Anzahl der möglichen Auswahlmöglichkeiten bestimmen oder diese Auswahlmöglichkeiten identifizieren.
Daher schlägt in Kontexten wie diesem, in denen der Vorlagenelementtyp keine direkte Beziehung zum Vorlagenargument hat, die Ableitung des Vorlagenarguments fehl und der Compiler löst eine aus Fehler.
Das obige ist der detaillierte Inhalt vonWarum schlägt die Ableitung des Vorlagentyps fehl, wenn von einem Elementtyp abgeleitet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!