Heim >Backend-Entwicklung >C++ >Warum kann der Compiler „T' in „test(TMap::Type)' nicht ableiten?

Warum kann der Compiler „T' in „test(TMap::Type)' nicht ableiten?

DDD
DDDOriginal
2024-12-17 02:26:25312Durchsuche

Why Can't the Compiler Deduce `T` in `test(TMap::Type)`?

T kann nicht aus Vorlage::Type abgeleitet werden

Im bereitgestellten Code tritt beim Versuch, die Vorlage abzuleiten, ein Fehler auf Argument T für die Testfunktion. Um zu verstehen, warum, ist es wichtig, sich mit dem Konzept des „nicht ableitbaren Kontexts“ zu befassen.

In der Vorlagendefinition von TMap definieren Sie einen Alias ​​namens „Type“ als std::map . Beim Versuch, T aus dem Funktionsaufruf test(tmap) abzuleiten, stößt der Compiler auf einen nicht ableitbaren Kontext.

Stellen Sie sich das folgende Szenario vor: Wenn TMap eine Spezialisierung für SomeType hätte, wobei Type als std::map< definiert ist ;double, double>, wie würde der Compiler den Typ SomeType allein anhand des Wissens bestimmen, dass TMap::Type ist? std::map? Dieser Abzug ist nicht möglich.

Wenn außerdem eine andere Spezialisierung von TMap für OtherType existiert, bei der der Typ wiederum std::map ist, wird die Situation noch mehrdeutiger. Angesichts der bekannten Äquivalenz von TMap::Type und TMap::Type kann der Compiler nicht zwischen SomeType und OtherType unterscheiden.

Es ist wichtig zu bedenken, dass der Compiler keine Annahmen über die Beziehung treffen kann zwischen den in der Vorlagendefinition verwendeten Typargumenten. Daher kann der Compiler in solchen nicht ableitbaren Kontexten das Vorlagenargument T nicht automatisch ableiten.

Das obige ist der detaillierte Inhalt vonWarum kann der Compiler „T' in „test(TMap::Type)' 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