首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我会得到“没有匹配的函数来调用..”对于可变模板函数?

对于可变模板函数,当出现“没有匹配的函数来调用..”的错误提示时,可能有以下几个原因:

  1. 参数数量不匹配:可变模板函数允许接受可变数量的参数,但是调用时传入的参数数量与函数定义的参数数量不一致,导致无法匹配到正确的函数。解决方法是检查函数定义和调用处的参数数量是否一致。
  2. 参数类型不匹配:可变模板函数的参数类型需要与调用时传入的参数类型匹配,如果类型不匹配,编译器无法找到匹配的函数。解决方法是检查函数定义和调用处的参数类型是否一致,如果不一致,可以进行类型转换或者重载函数。
  3. 函数重载问题:如果存在多个可变模板函数的重载,编译器可能无法确定调用哪个函数。解决方法是使用显式类型转换或者提供更具体的函数重载来消除歧义。
  4. 函数声明问题:如果可变模板函数的声明与定义不一致,编译器无法找到正确的函数。解决方法是检查函数声明和定义是否一致,包括参数类型、参数数量和返回类型等。

总结起来,当出现“没有匹配的函数来调用..”的错误提示时,需要检查参数数量、参数类型、函数重载和函数声明等方面的问题,确保调用的可变模板函数能够正确匹配到定义的函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入理解JavaScript函数式编程

为什么要学习函数式编程?...Untitled 4.png 纯函数函数:「相同输入永远会得到相同输出」,而且没有任何可观察副作用 纯函数就类似数学中函数(用来描述输入和输出之间关系),y=f(x); lodash 是一个纯函数功能库...并行处理 在多线程环境下并行操作共享内存数据很可能会出现意外情况 纯函数不需要访问共享内存数据,所以在并行环境下可以任意运行纯函数(Web Worker) 副作用 纯函数:对于相同输入永远会得到相同输出...,而是由子完成 子就是一个实现了map契约对象 可以把子想象成一个盒子,这个盒子里面封装了一个值 想要处理盒子中值,需要盒子map方法传递一个处理值函数(纯函数),由这个函数来对值进行处理...MayBe 作用是处理外部空值情况,防止空值异常 IO 子内部封装值是一个函数,把不纯操作封装到这个函数,不纯操作交给调用者处理 Monad 子内部封装值是一个函数(这个函数返回函子

4.2K30

【笔记】《C++Primer》—— 第16章:模板与泛型编程

,在模板实参推断过程中,编译器用函数调用实参类型来查找哪些函数版本最为匹配 对于函数模板与普通非模板函数不太一样,编译器通常不对实参进行类型转换从而只有几个类型转换会应用在实参上,编译器偏向于生成新模板实例来适配...然后再用得到信息正确参数传递给其他函数,这就是转发操作 16.3 重载与模板 函数模板可以被另一个模板或非模板函数重载,与平时一样名字相同函数需要参数不同才能重载 但是对于函数模板来说,实参调用函数会是重载版本中哪一个需要按照以下规则来判断...上面复杂规则总结起来就是“更特例化”,在没有歧义情况下,永远会调用发生了最少改变,最精确匹配,最不需要调用自定义类型转换(内置类型转换优先级更高),最不需要调用模板那个重载 当编译器缺少一个合适重载函数时...,编译器也会从模板函数中实例化出可以调用合适函数 因此一般在编写重载函数时候会编写多个比较特例函数然后保留一个接受const T&模板函数来兜底防止失去匹配 在定义任何函数前异地你更要记得声明所有重载函数版本防止编译器忽略你想要版本而实例化了另一个...(q); } 对于不同函数调用,编译器会实例出不同版本模板函数,这里要注意一个模板只能有一个参数包存在,且参数包一般被写在最右方防止二义性,如果出现了二义性,我们可以显式在调用时尖括号里标明各个模板参数类型

1.5K30

适合具备 C 语言基础 C++ 入门教程(十一)

: [image-20210224171715532] 通过第一行打印信息可以看到,当前调用mymax()函数调用普通函数,并不是模板函数,那么这是为什么呢,在这里通过传入参数可知两个模板函数也是调用...,但是为什么就是调用普通函数而非模板函数呢?...:int -> int 第三个普通函数:int -> int 所以,第二个模板函数和第三个普通函数并列第一,第一个模板函数排第二 3、选择更加匹配候选函数 如果匹配度相同 优先选择普通函数 对于多个模板函数...,选择一个更加特化(特化后续解释) 否则,代码出现二义性 所以,根据第二得到结果是第二个模板函数和第三个普通函数并列第一,根据第三条原则,优先选择普通函数,因此,在这里调用是普通函数。...(int*, int*),通过这里分析,我们可以看出对于第二个模板函数和第四个模板函数来讲,第四个模板函数更加具体,也就是更加特化,所以上述是调用第四个模板函数

20520

适合具备 C 语言基础 C++ 教程(十一)

image-20210224171715532 通过第一行打印信息可以看到,当前调用mymax()函数调用普通函数,并不是模板函数,那么这是为什么呢,在这里通过传入参数可知两个模板函数也是调用...,但是为什么就是调用普通函数而非模板函数呢?...,选择一个更加特化(特化后续解释) 否则,代码出现二义性 所以,根据第二得到结果是第二个模板函数和第三个普通函数并列第一,根据第三条原则,优先选择普通函数,因此,在这里调用是普通函数。...:第二个和第四个 4、它们都是模板函数,选出“更特化”,更特化意思也就是说参数匹配更加特殊,更加具体,更加细化 我们这个时候,回过头来看第二个模板函数,mymax(T& a, T& b),对于这个模板函数来说...(T*, T*),参数只能是指针,也就是说当T = int时候,也就是 mymax(int*, int*),通过这里分析,我们可以看出对于第二个模板函数和第四个模板函数来讲,第四个模板函数更加具体,

25320

函数式编程(FP)

那程序员江湖里是不是也存在没有感情API 调用工程师。随着前端生态迅速发展,目前框架、语法、提案都更新换代很快。...因此内部函数依然可以访问外部函数成员。 可能有的同学会问,为什么有引用不会被释放?...这里我们就不展开,有兴趣同学可以自行了解一下。 纯函数 (pure function) “相同输入会得到相同输出,而且没有任何可观测副作用。...柯里化 (currying) 假设一个场景,我们需要写一个函数来判断一个人年龄是否大于 18 岁。..._value)) } } new Container.of(1) .map(x => x + 1) .map(x => x * x) 但是这样一个基础子还是存在许多问题,比如初始化值与操作方法不匹配

1.6K10

MVVM之Vue源码分析

需要你了解本文没有介绍知识:Javascript继承(尤其是原型链继承)、数组方法(forEach等)、this指针、函数嵌套调用与递归调用等. 还有一项重要技能就是:debug调试 ?...对于大括号语法、普通指令、事件指令具体解析过程即函数调用栈,我会以流程图形式展现出来,如下所示: ?...根据指令值(表达式)从methods中得到对应事件处理函数对象 给当前节点元素绑定指定事件名和回调函数dom事件监听 指令解析完成后,移除此指令属性 模板解析:一般指令解析 得到指令名和指令值(表达式...--- className属性 将得到表达式值设置到对应属性上 指令解析完成后,移除此指令属性 哦,还有大括号解析: 模板解析:大括号解析 大概三步:匹配大括号内值 从data...中取值 更新值 根据正则对象得到匹配表达式字符串 从data中取出表达式对应属性值 将属性值设置为文本节点textContent 总结一下,模板解析大概流程就是: 1)将el所有子节点取出

82030

模版初阶

C++为什么要引入模版? 当我们想用一个函数完成多个类型参数操作时,发现每次都要重新再写一个函数再使用,对于重载函数虽然可以使用,但是每次用新类型都需要再去重载一次函数**。...模板函数因为匹配度更高或者更具体而被优先选择 当调用一个函数时,编译器首先尝试找到一个非模板函数与传入参数类型完全匹配。...对于模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用模板函数而不会从该模板产生出一个实例。...模板函数对于模板函数,编译器不会自动尝试通过类型转换来匹配一个特定实例化版本。...这意味着,如果没有显式提供模板参数或没有其他上下文帮助编译器推断出正确类型,仅依赖于隐式类型转换调用可能不会成功。 但如果有多个模版参数的话,模板函数就会自动生成相对应函数进行使用。

3400

提高代码逼格利器:宏定义-从入门到放弃

通过函数来实现: 形参类型需要确定,调用时对参数进行检查; 调用函数时需要额外开销:操作函数栈中形参、返回值等; 通过宏来实现: 不需要检查参数,更灵活传参; 直接对宏进行代码扩展,执行时不需要函数调用...这里比较是 2 个整型数据,那么如果还需要比较 2 个浮点型数据呢? 使用宏来调用:MAX(1.1, 2.2);一切 OK; 使用函数调用:max(1.1, 2.2); 编译报错:类型不匹配。...在 C++ 中,这样操作可以通过参数模板来实现,所谓模板也是一种代码动态生成机制。当定义了一个函数模板后,根据调用实参,来动态产生多个函数。...参数名定义和使用 宏定义参数个数可以是不确定,就像调用 printf 打印函数一样,在定义时候,可以使用三个点(...)来表示可变参数,也可以在三个点前面加上可变参数名称。...,然后动态拼接得到对应函数,最后调用这个函数

1K40

C++11 变参模板

展开函数参数包方法一般有两种:一种是通过递归函数来展开参数包,另外一种是通过逗号表达式来展开参数包。...展开参数包函数有两个,一个是递归函数,另外一个是递归终止函数,参数包Args…在展开过程中递归调用自己,每调用一次参数包中参数就会少一个,直到所有的参数都展开为止,当没有参数时,则调用模板函数print...,也比较好理解,但也有一个缺点,就是必须要一个重载递归终止函数,即必须要有一个同名终止函数来终止递归,这样可能会感觉稍有不便。....); }; A* pa = Instance(1); B* pb = Instance(1,2) 3.2实现泛化delegate C++中没有类似C#委托,我们可以借助可变模版参数来实现一个...AggregateDelegate fun1 = Fun1;//编译报错,参数类型不匹配 这里不能泛化原因是声明委托类型时候就限定了参数类型和个数,在C++11里不存在这个问题了,因为有了可变模版参数

3.3K51

编程语言:类型系统本质

编程语言中基本类型 类型组合 OOP与接口类型 函数类型 子(Functor)和单子(Monad) 1. 概述:什么是类型?为什么要引入类型概念?...泛型类型,如T[],需要一个实际类型参数来生成一个具体类型。其类型构造函数为(T) -> [T[] type]。...它是一种新函数组合方式,可以链式调用,可以用于约束传输数据结构,可以映射适配函数输出值与下一个函数输入值,可以一定程度上避免函数执行副作用。 用途是什么呢?...对于任何泛型类型,以Box为例,如果map()操作接受一个Box和一个从T到U函数作为实参,并得到一个Box,那么该map()就是一个子。...(fmap h) 子很强大,但是大部分主流语言都没有很好方式来表达子,因为常规定义依赖于高阶类型(不是“高阶函数”,是“高阶类型”)概念。

2.6K31

程序员应该掌握600个英语单词

callback 回呼 回调  call operator call(式呼叫)运算子调用操作符  (同 function call operator)  candidate function 候选式...式、函数 函数  function call operator 同 call operator  function object 式物件(ref....功能  function template 模板式范本 函数模板  functor 仿式 仿式、子  game 游戏 游戏  generate 生成  generic 泛型、一般化 一般化...功能  function template 模板式范本 函数模板  functor 仿式 仿式、子  game 游戏 游戏  generate 生成  generic 泛型、一般化 一般化...  mouse 滑鼠 鼠标  mutable 可变 可变  multi-tasking 多工 多任务  namespace 命名空间 名字空间、命名空间  native 原生 本地、固有的  nested

1.3K00

程序员必须掌握600个英语单词

callback 回呼 回调 call operator call(式呼叫)运算子调用操作符 (同 function call operator) candidate function 候选式...式、函数 函数 function call operator 同 call operator function object 式物件(ref....功能 function template 模板式范本 函数模板 functor 仿式 仿式、子 game 游戏 游戏 generate 生成 generic 泛型、一般化 一般化...功能 function template 模板式范本 函数模板 functor 仿式 仿式、子 game 游戏 游戏 generate 生成 generic 泛型、一般化 一般化...mouse 滑鼠 鼠标 mutable 可变 可变 multi-tasking 多工 多任务 namespace 命名空间 名字空间、命名空间 native 原生 本地、固有的 nested

1.3K20

【笔记】《C++Primer》—— 第三部分:类设计者工具

构造函数来类型转换,则拷贝初始化还是直接初始化就无关紧要了 析构函数行为与构造函数相反,会自动销毁掉非static成员和调用成员析构 析构函数没有参数列表,所以成员销毁时行为完全依赖于成员自己 析构会在变量离开作用域或母构件销毁时销毁...forward函数,能恢复被右值引用参数去除右值引用属性 在没有歧义情况下,永远会调用发生了最少改变,最精确匹配,最不需要调用自定义类型转换,最不需要调用模板那个重载,即“更特例化” 可变参数模板就是一个能接受数目可变类型也可变参数类...,那些可变参数部分称为参数包,由省略号...标记 可变参数模板函数通常是一种递归函数,一般我们编写时候都会递归地分析包中内容并调用直到终止,将包中内容分解成元素称为包扩展 包扩展一种用法是用来扩展提取输入参数...即使我们需要特例化所有的类型参数也要保留一个空尖括号做标记 完全模板特例化本质是模板一个实例,而不是重载,因此特例化不会影响函数匹配。...但如果只是部分特例化模板则仍然是模板,则依然会参与匹配 我们也可以特例化类模板,此时必须在原模板定义命名空间中特例化它。

1.7K10

【Rust 易学教程】第 1 天:Rust 基础,基本语法

今天,我们正式进入 Rust 基础学习。在本文内容中,我会为大家介绍以下内容: 基本 Rust 语法: 变量、标量和复合类型、枚举、结构、引用、函数和方法。...例如,Rust 通过借用检查器消除了整个类运行时错误,得到了像 C和 c++ 一样性能,但没有内存不安全问题。此外,还可以获得具有模式匹配和内置依赖项管理等结构现代语言。...为什么是 Rust 接下来,我会为你从几个方面介绍为什么 Rust 会在众多语言中突出重围。先来一个示例。...对于上面的例子,Rust 社区仍在努力寻找最佳解决方案——也许对于其中一些事情没有单一“最佳解决方案”。...添加 Rectangle::square(width: u32) 构造函数来说明此类静态方法可以接受任意参数。 函数重载 不支持重载: 每个函数有一个单独实现: 总是有固定数量参数。

25620

C++雾中风景9:emplace_back与可变模板

(move(t)); //调用move函数使time对象成为右值,可以利用移动构造函数来拷贝对象 tlist.emplace_back(2, 3, 4); //直接调用了time构造函数在vector...(省去了移动构造环节)。所以这就是为什么在C++11之后提倡大家使用emplace_back来代替旧代码之中push_back函数。...而最终利用强制类似装换指针来指向容器类之中对应类构造函数,并且利用可变模板将构造函数所需要内容传递过去构造新对象。...可变模板是C++11新引进特性,接下来我们来详细看看可变模板是如何来使用,来实现任意长度参数呢?...3.可变模板函数式编程 首先,我们先看看,可变模板定义: template <class...

95220

Python入门到放弃 | 超简单 跟我学(七)

需要注意是,在上面的例子中,调用2 次相同函数,这也就意味着对于同一个功能不需要再次编写相同代码了。 函数参数 函数参数就是调用函数时你提供给函数值,这样函数就可以用这些值做一些事情。...局部变量 在一个函数中声明变量时,这些变量与函数外部使用重名其它变量没有任何关系 —— 即,变量名对于函数来讲是 局部(只在函数内部有效) 。称之为变量作用域 。...对于定义函数来讲, x 是局部。因此,当我们改变函数中 x 值时,主语句块中定义 x 不会受到任何影响。...默认参数值 对于某些函数,你可能想让某些形参是可选,并在用户没有指定这些形参值时,使用默认值。你可以通过默认形参值来实现这个功能。...函数 func 共三个参数。一个没有默认值参数,以及两个有默认值参数。 第一种用法 func(3, 7)。形参 a 得到值 3,形参 b 得到值 7,形参 c 得到默认值 10。

40240

函数模板 ## 函数模板

编写函数模板可能无法处理某些类型显式具体化 方法:对于给定函数名,可以有⾮模板函数模板函数和显式具体化模板函数以及它们重载版本。...编译器使⽤模板为特定类型⽣成函数定义时,得到模板实例(instantiation)。...编译器选择使用哪个函数版本对于函数重载、函数模板函数模板重载,C++需要(且有)⼀个 定义良好策略,来决定为函数调⽤使⽤哪⼀个函数定义,尤其是有多 个参数时。...- const和⾮const之 间区别只适⽤于指针和引⽤指向数据。 - ⼀个完全匹配优于另⼀个另⼀种情况是,其中⼀个是⾮模板 数,⽽另⼀个不是。...- 如果有多个 同样合适模板函数模板函数,但没有⼀个函数⽐其他函数更具体,则函数调⽤将是不确定,因此是错误;自己选择 在有些情况下,可通过编写合适函数调⽤,引导编译器做出您希望选择。

2.1K10

C++那些事之SFINAE

根据名称找出所有适用函数函数模板对于适用函数模板,要根据实际情况对模板形参进行替换; 替换过程中如果发生错误,这个模板会被丢弃 在上面两步生成可行函数集合中,编译器会寻找一个最佳匹配,产生对该函数调用...如果没有找到最佳匹配,或者找到多个匹配程度相当函数,则编译器需要报错。...首先,函数模板接受任何类型参数(假设是T),但是编译器真正黑洞、魔鬼变量真空、被遗忘类型遗忘都是可变参数函数。是的,就像可怕C printf。...必须记住一点是,函数模板不如可变参数函数通用。 注意:模板函数实际上可以比普通函数更精确。但是,在平局情况下,普通函数将具有优先级。...0分支,说明obj没有serialize函数,但是却调用了,当然出错了。

2.1K20

现代C++之SFINAE

根据名称找出所有适用函数函数模板对于适用函数模板,要根据实际情况对模板形参进行替换; 替换过程中如果发生错误,这个模板会被丢弃 在上面两步生成可行函数集合中,编译器会寻找一个最佳匹配,产生对该函数调用...如果没有找到最佳匹配,或者找到多个匹配程度相当函数,则编译器需要报错。...首先,函数模板接受任何类型参数(假设是T),但是编译器真正黑洞、魔鬼变量真空、被遗忘类型遗忘都是可变参数函数。是的,就像可怕C printf。...必须记住一点是,函数模板不如可变参数函数通用。 注意:模板函数实际上可以比普通函数更精确。但是,在平局情况下,普通函数将具有优先级。...0分支,说明obj没有serialize函数,但是却调用了,当然出错了。

2.9K20

【C++】C++11——新类功能|default、delete|可变参数模板|emplace

默认生成移动构造函数对于内置类型成员会完成值拷贝(浅拷贝),对于自定义类型成员,如果实现了移动构造,就调用移动构造,没有实现就调用拷贝构造 如果没有自己实现移动赋值运算符重载:并且没有实现析构函数...默认生成移动构造函数对于内置类型完成值拷贝(浅拷贝),对于自定义类型成员,如果实现了移动赋值,就调用移动赋值,没有实现就调用拷贝构造(默认移动赋值与上面的移动构造类似) 最后,如果提供了移动构造和移动赋值...可变参数模板是C++11新增特性之一,能够让我们创建可以接收可变参数函数模板和类模板 1.可变参数函数模板 可变参数模板定义: template void ShowList...先给可变参数函数模板增加一个模板参数class T,从接收参数包中把第一个参数分离出来 在函数模板中递归调用函数模板调用时传入剩下参数包 直到递归到参数包为空,退出递归。...,既可以接收左值,也可以接收右值,同时还可以接收参数包 如果调用emplace接口是传入参数是参数包,那就可以调用函数进行插入,最终定位new表达式调用构造函数对空间进行初始化,匹配到构造函数

18230
领券