Questions tagged «templates»

template标记用于多种环境:通用编程(尤其是C ++),以及使用模板引擎生成数据/文档。在实现上有很多疑问时使用此标记-标记实现所使用的代码语言。

1
可以将变量模板作为模板模板参数传递吗?
以下荒谬的示例无法编译,但是还有其他方法可以将变量模板作为模板模板参数传递吗? template<typename T> constexpr auto zero = T{0}; template<typename T, template<typename> auto VariableTemplate> constexpr auto add_one() { return VariableTemplate<T> + T{1}; } int main() { return add_one<int, zero>(); } 尝试编译器资源管理器

2
C ++模板模板参数类型推导
我有在字符串容器中查找并打印出模式匹配项的代码。在模板化的函数foo中执行打印 编码 #include <iostream> #include <algorithm> #include <iterator> #include <vector> #include <string> #include <tuple> #include <utility> template<typename Iterator, template<typename> class Container> void foo(Iterator first, Container<std::pair<Iterator, Iterator>> const &findings) { for (auto const &finding : findings) { std::cout << "pos = " << std::distance(first, finding.first) << " "; std::copy(finding.first, finding.second, std::ostream_iterator<char>(std::cout)); …

1
GCC / C ++ 17中带有模板模板类的问题
考虑以下2个重载 template<typename T> bool test() { return true; } template<template<typename ...> class T> bool test() { return false; } 第一个适用于常规类,而第二个适用于未实例化的模板。例如: std::cout<<test<int>()<<std::endl; <-- this yields 1 std::cout<<test<std::list>()<<std::endl; <--this yields 0 现在考虑以下模板函数: template<typename U> bool templfun(){ struct A{ bool f(){ return test<A>(); // <-- this gives an error } }; return test<A>(); …
10 c++  templates  gcc  clang  c++17 


3
在以下情况下,为什么不需要对依赖类型使用typename?
我一直在这里阅读有关删除类型引用的信息。 它给出以下示例: #include <iostream> // std::cout #include <type_traits> // std::is_same template<class T1, class T2> void print_is_same() { std::cout << std::is_same<T1, T2>() << '\n'; } int main() { std::cout << std::boolalpha; print_is_same<int, int>(); print_is_same<int, int &>(); print_is_same<int, int &&>(); print_is_same<int, std::remove_reference<int>::type>(); // Why not typename std::remove_reference<int>::type ? print_is_same<int, std::remove_reference<int &>::type>();// Why …


2
为什么C ++在对Foo <T> :: Foo(T &&)的调用中不能推断T?
给定以下模板结构: template&lt;typename T&gt; struct Foo { Foo(T&amp;&amp;) {} }; 这可以编译,并T推导为int: auto f = Foo(2); 但这无法编译:https : //godbolt.org/z/hAA9TE int x = 2; auto f = Foo(x); /* &lt;source&gt;:12:15: error: no viable constructor or deduction guide for deduction of template arguments of 'Foo' auto f = Foo(x); ^ &lt;source&gt;:7:5: note: candidate function …

2
C ++-为什么这里需要'template'关键字?
我有以下代码: template &lt;typename TC&gt; class C { struct S { template &lt;typename TS&gt; void fun() const {} }; void f(const S&amp; s) { s.fun&lt;int&gt;(); } }; // Dummy main function int main() { return 0; } 在同时使用gcc 9.2和clang(9.0)进行构建时,由于template调用关键字需要关键字,因此出现编译错误fun。lang声显示: error: use 'template' keyword to treat 'fun' as a dependent template name …

1
从函数指针数组中传递函数指针作为模板参数
我想将功能指针数组中的功能指针作为模板参数传递。即使Intellisense抱怨有些问题,我的代码似乎还是使用MSVC编译的。gcc和clang均无法编译代码。 考虑以下示例: static void test() {} using FunctionPointer = void(*)(); static constexpr FunctionPointer functions[] = { test }; template &lt;FunctionPointer function&gt; static void wrapper_function() { function(); } int main() { test(); // OK functions[0](); // OK wrapper_function&lt;test&gt;(); // OK wrapper_function&lt;functions[0]&gt;(); // Error? } MSVC编译代码,但是Intellisense给出以下错误:invalid nontype template argument of type "const …
9 c++  templates  c++14 

5
如何在模板中返回正确的数据类型?
#include &lt;iostream&gt; using namespace std; template &lt;class X, class Y&gt; Y big(X a, Y b) { if (a &gt; b) return (a); else return (b); } int main() { cout &lt;&lt; big(32.8, 9); } 在这里,我在CPP中使用模板,因此,当我big绕过doubleand int类型的参数调用函数时,我希望返回的答案是double。这里的类型,它返回32而不是32.8。 如何获得所需的输出?如何编写适当的返回类型的big函数?

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 …

1
试图了解模板和名称查找
我正在尝试了解以下代码片段 片段1 template &lt;typename T&gt; struct A { static constexpr int VB = T::VD; }; struct B : A&lt;B&gt; { }; gcc9和clang9都不会在此处引发错误。 问:为什么要编译此代码?A&lt;B&gt;从B继承时,我们不是实例化吗?B中没有VD,因此编译器不应该在这里抛出错误吗? 片段2 template &lt;typename T&gt; struct A { static constexpr auto AB = T::AD; // &lt;- No member named AD in B }; struct B : A&lt;B&gt; { …
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.