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
Barbara StreisandOriginal
2024-12-26 13:47:10889Durchsuche

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;
};

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!

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