Heim >Backend-Entwicklung >C++ >Warum schlägt die Ableitung des Vorlagentyps fehl, wenn von einem Elementtyp abgeleitet wird?

Warum schlägt die Ableitung des Vorlagentyps fehl, wenn von einem Elementtyp abgeleitet wird?

Barbara Streisand
Barbara StreisandOriginal
2024-12-19 09:24:10136Durchsuche

Why Does Template Type Deduction Fail When Inferring from a Member Type?

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::Type abzuleiten.

Dieser Fehler ist auf das Konzept des „nicht ableitbaren Kontexts“ zurückzuführen ." In diesem Fall hat der Elementtyp „Type“ des Vorlagentyps TMap keine inhärente Beziehung zum Vorlagenargument T.

Betrachten Sie eine hypothetische Spezialisierung von TMap:

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

Wenn der Compiler T aus TMap::Type ableiten müsste, würde er auf eine Mehrdeutigkeit stoßen. Der Wert von TMap::Type ist std::map. Es ist jedoch nicht garantiert, dass T in TMap ist das Gleiche wie SomeType in der Spezialisierung.

Weitere Spezialisierung von TMap:

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

Die Situation verschlimmert sich, da nun Folgendes gilt:

  • TMap
  • TMap::Type = std::map

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!

Stellungnahme:
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