Als «template-specialization» getaggte Fragen


4
Warum kann die Funktionsvorlage nicht teilweise spezialisiert werden?
Ich weiß, dass die Sprachspezifikation eine teilweise Spezialisierung der Funktionsvorlage verbietet . Ich würde gerne wissen, warum es das verbietet. Sind sie nicht nützlich? template<typename T, typename U> void f() {} //allowed! template<> void f<int, char>() {} //allowed! template<typename T> void f<char, T>() {} //not allowed! template<typename T> void f<T, …

2
"Vorlage <>" vs "Vorlage" ohne Klammern - was ist der Unterschied?
Angenommen, ich habe erklärt: template &lt;typename T&gt; void foo(T&amp; t); Was ist nun der Unterschied zwischen template &lt;&gt; void foo&lt;int&gt;(int&amp; t); und template void foo&lt;int&gt;(int&amp; t); semantisch? Und haben Vorlagen ohne Klammern und Vorlagen mit leeren Klammern in anderen Kontexten eine andere Semantik? Verwandte Themen: Wie erzwinge ich die Instanziierung …

1
Ist Clang korrekt, um Code abzulehnen, in dem die verschachtelte Klasse einer Klassenvorlage nur über Spezialisierungen definiert ist?
Gegeben die folgende Klassenvorlage: template&lt;typename T&gt; struct Outer { struct Inner; auto f(Inner) -&gt; void; }; Wir definieren Innerseparat für jede Spezialisierung von Outer: template&lt;&gt; struct Outer&lt;int&gt;::Inner {}; template&lt;&gt; struct Outer&lt;double&gt;::Inner {}; und definieren Sie dann die Elementfunktion feinmal für alle Spezialisierungen von Outer: auto Outer&lt;T&gt;::f(Inner) -&gt; void { } …

1
Clang / GCC-Inkonsistenz in der Klassenspezialisierung
Ich kam dieses Problem auf bei dem Versuch , sich zu spezialisieren tuple_size/ tuple_elementeine benutzerdefinierte Klasse in C ++ 17 für strukturierte Bindung. Der folgende Code wird in GCC kompiliert, jedoch nicht in Clang (beide Trunk-Versionen, siehe Link unten). #include &lt;type_traits&gt; template&lt;typename T, typename... Ts&gt; using sfinae_t = T; template&lt;typename …

1
Eliminierung der if / else-Verzweigung in C ++ zur Kompilierungszeit
Im folgenden Codebeispiel ifhängt die Anweisung vom boolVorlagenparameter ab, bei dem es sich um eine Konstante zur Kompilierungszeit handelt. Compiler behandeln diesen Code unterschiedlich: MSVC schlägt mit einem Verbindungsfehler fehl (was ich erwartet habe), da die Vorlagenfunktion in der elseVerzweigung nicht auf den trueWert der Vorlagenparameter spezialisiert ist (obwohl sie …

1
Spezialisierung basierend auf der Gültigkeit der Arraygröße
Der Versuch, sich auf die Gültigkeit der Arraygröße zu spezialisieren: // base template template&lt;int p, typename T = void&gt; struct absolute { operator int () const { return 0; } }; // positive case template template&lt;int p&gt; struct absolute&lt;p, typename std::void_t&lt;int[p]&gt;&gt; { operator int () const { return p; } …

2
Warum ist eine Teilklassenvorlagenspezialisierung für eine übereinstimmende Vorlagenklasse mit einer anderen Teilspezialisierung ohne Vorlagenübereinstimmung nicht eindeutig?
Die Frage mag zu schwer zu beschreiben sein, aber hier ist ein minimales Beispiel: #include &lt;iostream&gt; #include &lt;type_traits&gt; template &lt;class T, class U, class Enabler&gt; struct my_trait : std::false_type {}; template &lt;class T, class U&gt; struct my_trait&lt;T, U, std::enable_if_t&lt;std::is_same&lt;T, U&gt;::value&gt;&gt; : std::true_type {}; template &lt;class T&gt; class temped {}; template …
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.