Questions tagged «template-specialization»

4
为什么功能模板不能部分专业化?
我知道语言规范禁止 对功能模板进行部分专业化。 我想知道为什么它禁止这样做的理由?它们没有用吗? 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, int>() {} //not allowed!

6
C ++函数模板部分专业化?
我知道下面的代码是类的部分专业化: template <typename T1, typename T2> class MyClass { … }; // partial specialization: both template parameters have same type template <typename T> class MyClass<T,T> { … }; 我也知道C ++不允许函数模板部分专业化(仅允许完全专业化)。但是我的代码是否意味着我已将函数模板部分专门化用于一个/相同类型参数?因为它适用于Microsoft Visual Studio 2010 Express!如果否,那么您能否解释部分专业化概念? #include <iostream> using std::cin; using std::cout; using std::endl; template <typename T1, typename T2> inline T1 max …

2
“ template <>”和“ template”不带括号-有什么区别?
假设我已经声明: template &lt;typename T&gt; void foo(T&amp; t); 现在,两者之间有什么区别 template &lt;&gt; void foo&lt;int&gt;(int&amp; t); 和 template void foo&lt;int&gt;(int&amp; t); 在语义上?在没有上下文的情况下,无括号的模板和无括号的模板是否具有其他语义? 相关信息: 如何强制C ++模板的特定实例实例化?

1
Clang是否正确拒绝仅通过专门化定义类模板的嵌套类的代码?
给定以下类模板: template&lt;typename T&gt; struct Outer { struct Inner; auto f(Inner) -&gt; void; }; 我们Inner为以下每种专业分别定义Outer: template&lt;&gt; struct Outer&lt;int&gt;::Inner {}; template&lt;&gt; struct Outer&lt;double&gt;::Inner {}; 然后f针对以下所有专业定义一次成员函数Outer: auto Outer&lt;T&gt;::f(Inner) -&gt; void { } 但是Clang(9.0.0)抱怨: error: variable has incomplete type 'Outer::Inner' auto Outer&lt;T&gt;::f(Inner) -&gt; void ^ 我们还可以通过提供Inner以下所有其他专长的定义来规避编译器错误Outer: template&lt;typename T&gt; struct Outer&lt;T&gt;::Inner {}; 或通过f为每个专业分别定义: template&lt;&gt; auto …

1
clang / gcc类专业化不一致
我碰到这个问题,而试图专注tuple_size/ tuple_element自定义类在C ++ 17的结构结合。 下面的代码在GCC中编译,但在clang中不编译(两个主干版本,请参见下面的链接)。 #include &lt;type_traits&gt; template&lt;typename T, typename... Ts&gt; using sfinae_t = T; template&lt;typename T, bool... Bs&gt; using sfinae_v_t = sfinae_t&lt;T, typename std::enable_if&lt;Bs&gt;::type...&gt;; template &lt;typename T&gt; struct Test; template &lt;typename T&gt; struct Test&lt;sfinae_v_t&lt;T, std::is_integral_v&lt;T&gt;&gt;&gt; {}; void f() { Test&lt;int&gt; t; } https://godbolt.org/z/ztuRSq 这是clang提供的错误: &lt;source&gt;:13:8: error: class template partial …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.