首页 > TAG信息列表 > template-deduction

没有匹配的函数调用带有模板的选择排序函数(C)

我在玩模板,我想知道为什么使用模板时出现不匹配的函数错误. /*selection sort*/ template <typename InputIterator, typename T> void selection_sort(InputIterator first, InputIterator last){ InputIterator min; for(; first != last - 1; ++first){ min =

c – 我可以在不提供参数的情况下生成函数吗?

所以c++17有std::function Deduction Guides所以给出: int foo(); 我可以: std::function bar(foo); 但我坚持使用c++14编译器.我必须做更多的事情:function< int()>巴(富).我想知道是否有办法创建一个std ::函数而不传递函数指针并明确提供函数签名?因此,例如make_pair将从它的参

c – 具有可变参数模板构造函数的演绎指南和可变参数类模板 – 不匹配的参数包长度

考虑以下类定义和deduction guide: template <typename... Ts> struct foo : Ts... { template <typename... Us> foo(Us&&... us) : Ts{us}... { } }; template <typename... Us> foo(Us&&... us) -> foo<Us...>; 如果我尝试使用显式模板

c – 由clang采取的免费扣除指南 – 谁是正确的?

请考虑以下代码: template <typename... Types> struct list { template <typename... Args> list(Args...) { static_assert(sizeof...(Types) > 0); } }; template <typename... Args> list(Args...) -> list<Args...>;

c – 非推导上下文中模板参数推导的解决方法

请考虑以下代码: #include <iostream> template<class T> struct outer { struct inner {}; }; template<class T> std::ostream& operator<<(std::ostream & stream, typename outer<T>::inner const&

c – 为什么不能推导出unique_ptr的模板参数?

当您从C 17获得类模板参数推导时,为什么不能推导出std :: unique_ptr的模板参数?例如,这给了我一个错误: std::unique_ptr smp(new D); 这说“缺少类模板的参数列表”. 模板参数(至少是指针类型)不应该是可以推断的吗? See this: any declaration that specifies initialization of

c – 作为模板参数的功能的扣除指南

We can use std::unique_ptr to hold a pointer allocated with malloc which will be freed appropriately. 但是,生成的std :: unique_ptr的大小将是2个指针,一个用于指向对象的指针,一个用于指向删除函数的指针,而不是通常的指向对象的指针和隐式删除.正如一个答案所指出的,可以

c – std :: array的演绎指南

我通过书C模板独特的quide,我试着理解std :: array的演绎指南是如何工作的. 关于标准的定义,以下是声明 template <class T, class... U> array(T, U...) -> array<T, 1 + sizeof...(U)>; 例如,如果在main中创建一个数组 std::array a{42,45,77} 如何进行演绎? 谢谢解决方法:

c – 使用两个以上的arg推导std :: function

我想知道为什么std::function只知道两个参数的功能.我写了一些运行良好的代码,但是有很多限制.任何反馈欢迎.特别是,我怀疑我正在重新发明轮子. 我的代码是ideone,我会参考它. 例如,我可以用以下内容描述main的类型: function_type_deducer(main).describe_me(); // Output: I retu

c – 为什么编译器不能通过引用传递2D数组来计算数组的大小

只是想知道 – 我写了以下功能 template <class T, size_t N> T* asFlatArray (T arr[][N]) { // some code } 并称之为 asFlatArray(myArray); // where myArray is int myArray[some_size][sime_size]; 编译运行没有错误.但如果我改变’arr’来引用像 template <class T

c – 模板推导因参数包后的参数而失败

我有这个功能: template <typename... Args> void f(Args... args, int last) { } 如果我在没有显式模板参数的情况下调用它,模板推导将失 f(2, 2); // candidate expects 1 argument, 2 provided 但是为参数包提供显式模板参数有效: f<int>(2, 2); // compiles fine 尽管从逻

c – 为类模板忽略用户定义的转换运算符(非模板不是这样)

这段代码确实编译(重要的一点是F()只接受As,并且由于存在从B到A的隐式转换,我可以很容易地将B传递给它.) struct A {}; struct B { constexpr operator A () const {return {};} }; void F (A a) {} int main() { F(B()); return 0; } 但模板化版本无法编译: temp

c – 可以从指向成员函数模板参数的指针推导出类类型

是否可以从其指向memmber T :: * f的指针推导出类T的类型,如下所示. struct Foo { void func(){} }; template<typename T, void (T::*f)()> void bar() { } int main() { bar<Foo,Foo::func>(); // bar<Foo::func>(); // Desired } 解决方法:在C 17中,您将被允许

c – SFINAE是否依赖于类型扣除?

我对cppreference.com中的以下引用感到困惑: This rule applies during overload resolution of function templates: When substituting the deduced type for the template parameter fails, the specialization is discarded from the overload set instead of causing a compi

c – 为什么模板参数推导不起作用?

以下玩具程序将一种音乐转换为相应的颜色.它编译并执行得很好 – 如预期的那样,COUNTRY的转换失败,而conversion()函数返回默认的WHITE.但是,如果我删除模板参数< MUSIC,COLOR>,模板参数推断无法识别要使用的类型.我怎样才能得到演绎? #include <map> #include <iostream> #include