Heim > Backend-Entwicklung > C++ > Warum schlägt die Vorlagenableitung bei impliziter Typkonvertierung für benutzerdefinierte Typen fehl?

Warum schlägt die Vorlagenableitung bei impliziter Typkonvertierung für benutzerdefinierte Typen fehl?

Linda Hamilton
Freigeben: 2024-10-28 14:28:30
Original
1077 Leute haben es durchsucht

Why Does Template Deduction Fail with Implicit Type Conversion for User-Defined Types?

Implizite Typkonvertierung und Vorlagenableitung

Beim Versuch, ein int implizit in einen Skalar Objekt innerhalb eines Template-Funktionsaufrufs, schlägt die Ableitung des Template-Arguments möglicherweise fehl. Dies liegt daran, dass bei der Ableitung von Vorlagenargumenten benutzerdefinierte Konvertierungen wie die zwischen int und Scalar nicht automatisch berücksichtigt werden.

Im bereitgestellten Code:

<code class="cpp">func(a, 2);</code>
Nach dem Login kopieren

the Der Compiler versucht, den int 2 implizit in einen Skalar umzuwandeln. Objekt, aber die Ableitung des Vorlagenarguments schlägt fehl, da benutzerdefinierte Konvertierungen nicht berücksichtigt werden. Um dieses Problem zu lösen, muss das Argument explizit auf der Aufruferseite konvertiert werden:

<code class="cpp">func(a, Scalar<int>{2}); // C++14</code>
Nach dem Login kopieren

Alternativ kann bei Verwendung von C 17 ein Abzugsleitfaden für Scalar definiert werden, der die folgende Syntax ermöglicht:

<code class="cpp">func(a, Scalar{2});</code>
Nach dem Login kopieren

Schließlich kann die explizite Instanziierung der Vorlagenfunktion mit dem angegebenen Typargument auch die Notwendigkeit einer impliziten Konvertierung umgehen:

<code class="cpp">func<int>(a, 2); // Assuming Scalar<T>::Scalar(T) is not explicit</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum schlägt die Vorlagenableitung bei impliziter Typkonvertierung für benutzerdefinierte Typen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage