使用空尖括号<>的模板函数调用

 雷宠专业摄影工作室 发布于 2023-02-12 17:38

我对下面的模板行为感到困惑,它使用空尖括号(没有参数的模板)编译很好,因为从语法上讲,模板<>被保留以标记显式模板特化.

template  void add(T a, T b) { }
int main() {
    add<>(10, 3); // compiles fine since both parameters are of same data type
    add<>(10, 3.2); // Error: no matching function for call to add(int, double)
}

在上面的例子中模板参数真的是可选的吗?

2 个回答
  • template<> 保留用于标记显式模板特化.

    它意味着各种各样的东西,取决于背景.这意味着"使用默认或推断的参数",就像你简单地说的那样add.

    在第一种情况下,两个函数参数具有相同的类型,因此模板参数可以推导为int.

    在第二种情况下,它们具有不同的类型,因此无法推导出模板参数.您必须指定所需内容,例如add<double>,转换一个函数参数以匹配另一个函数参数,或修改模板以分别对每个类型进行参数化.

    在上面的例子中模板参数真的是可选的吗?

    是的,如果它可以从参数类型中推断出来.

    2023-02-12 17:40 回答
  • 在第一种情况下,是的,因为可以通过标准规则推断出来.在第二个,不,因为他们不能 - 你必须写如下:

    add<float>(10, 3.2);
    

    2023-02-12 17:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有