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

模板构造函数类型推导不起作用(没有匹配的构造函数用于初始化...)使用function<>参数

模板构造函数类型推导不起作用是指在使用function<>参数时,无法找到匹配的构造函数进行初始化。function<>是C++11引入的一个模板类,用于包装可调用对象(函数、函数指针、成员函数指针等),并提供一种统一的方式来调用这些可调用对象。

在使用function<>参数时,编译器会尝试根据传入的参数类型推导出匹配的构造函数,然后进行初始化。但是,如果没有找到匹配的构造函数,就会出现模板构造函数类型推导不起作用的情况。

解决这个问题的方法有以下几种:

  1. 显式指定模板参数类型:可以通过显式指定模板参数类型来解决类型推导失败的问题。例如,如果function<>参数是一个函数指针,可以使用function<void(int)>来指定参数类型为void(int)的函数。
  2. 使用lambda表达式:lambda表达式可以用来创建匿名函数对象,并且可以自动推导参数类型。通过使用lambda表达式作为function<>参数,可以避免类型推导失败的问题。例如,可以使用function<void(int)>({})来创建一个接受int类型参数的函数对象。
  3. 使用std::bind:std::bind是一个函数模板,用于将可调用对象与其参数进行绑定,并返回一个新的可调用对象。通过使用std::bind将可调用对象与参数进行绑定,然后将绑定后的对象作为function<>参数,可以解决类型推导失败的问题。

总结起来,当模板构造函数类型推导不起作用时,可以通过显式指定模板参数类型、使用lambda表达式或者使用std::bind来解决问题。具体的解决方法需要根据具体的代码和需求来确定。

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

相关·内容

  • 【C++】深入剖析C++11新特性

    在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多,所以我们要作为一个重点去学习。C++11增加的语法特性非常篇幅非常多,我们这里没办法一 一讲解,所以本期博客主要讲解实际中比较实用的语法。

    04
    领券