Запитання з тегом «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 …

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 ++ не дозволяє часткову спеціалізацію шаблону функцій …

2
“Шаблон <>” проти “шаблон” без дужок - яка різниця?
Припустимо, я заявив: 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
Чи правильно Кланг відхиляти код, у якому вкладений клас шаблону класу визначається лише за допомогою спеціалізації?
Дано такий шаблон класу: 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 { } але Кланг …

1
невідповідність кланг / гкц у спеціалізації класу
Я зіткнувся з цим питанням, намагаючись спеціалізуватися 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 = …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.