模板偏特化翻译 09 非类型模板参数、模板的特化、分离编译

日期:2023-03-11 12:39:36 / 人气: 556 / 发布者:成都翻译公司

浮点数、类对象以及字符串是不允许作为非类型模板参数的(即只允许整形家族:int、long、longlong、char)非类型模板参数必须在编译期就能确认结果,因为编译器在编译阶段需要根据传入的非类型模板参数实例化出对应的类或函数。不支持分离编译,所有用基于模板算法的实现必须包含在整个设计的头文件中。

文章目录

一、非类型模板参数

模板参数有两种类型:1. 类型参数和2. 非类型参数。

类型参数:出现在模板参数列表中并跟在类或类型名之后的参数。

非类型参数:使用常量作为类(函数)模板的参数。该参数可以用作类(函数)模板中的常量。

比如需要在类中打开一个静态数组,但是大小未知。在这种情况下,可以使用非类型参数:

另外模板偏特化翻译,模板参数也可以写成默认参数:

注意:

浮点数、类对象和字符串不允许作为非类型模板参数(即只有整数族:int、long、longlong、char)。非类型模板参数必须在编译时确认,因为编译器在编译阶段需要根据传入的非类型模板参数实例化对应的类或函数。二、 模板特化

虽然模板没有限制类型,但并不是所有类型都能得到我们想要的结果。比如这样的函数模板并不能达到我们比较字符串的目的:

这时候就需要对模板进行特化,即在原有模板的基础上,对特殊类型进行特殊类型的实现,模板特化分为函数模板特化和类模板特化。

2.1. 函数模板特化

函数模板的特化步骤:

首先,必须有一个基本的函数模板。关键字模板后跟一对空尖括号。函数名后跟一对尖括号,尖括号中指定需要特化的类型。函数参数列表必须与模板函数的基本参数类型完全一致,否则不同的编译器可能会报一些奇怪的错误。

例如,上面的字符串类型可以特化如下:

另外模板偏特化翻译,当函数模板和类型匹配函数同时存在时,编译器会优先调用类型匹配函数,不会根据函数模板实例化对应的函数,所以函数可以直接直接给。而不是专门:

2.2. 类模板和全专业化

全特化是确定模板参数列表中的所有参数。

偏专业

部分特化就是将部分参数特化,或者将参数指定为指针、引用等:

当然,如果有两个专门的模板匹配,就会报错:

三、 模板分离编译

一个程序由多个源文件实现。每个源文件分别生成一个 .o 目标文件。*后,将所有目标文件链接起来生成可执行文件的过程称为分离编译模式。比如函数声明写在.h头文件中,函数定义写在.cpp文件中。您可以通过在主文件中包含此头文件来使用该函数。

单独编译有以下优点:

它可以提高编译速度。比如修改了其中一个文件,单独编译只需要单独编译修改后的文件,大大节省了编译时间。

易于管理和阅读代码

阅读和管理整个文档很麻烦。当文档被分成小模块时,阅读感更好,管理更方便。3.1 为什么模板不支持单独编译

程序一般需要经过以下四个步骤才能运行:

预处理:头文件扩展、反注释、宏替换、条件编译等。代码检查无误后转成汇编语言。注意:头文件不参与编译,编译器将项目中的多个源文件分开编译。程序集:将编译后的程序集文件翻译成二进制目标文件。链接:链接生成的目标文件以生成可执行文件。

综上所述,定义的地方没有实例化,唯一需要实例化的地方就是没有定义的声明,*终导致链接错误。

解决方案:

将声明和定义放在同一个 .h 文件中。模板定义的位置显示实例化(不推荐,因为需要自己手动展示和实例化一个函数,会失去模板的意义)。3.2. 模板的优缺点

优势:

模板增强了代码的可重用性,节省了资源,加快了迭代开发。C++ 标准模板库 (STL) 也已生成。仅出现在 C++98 中的模板,以及出现在模板之后的 STL 库增强 代码的灵活性

相同的功能接口,但是输入的参数类型不同,只需要传入不同的参数,即可以实例化不同的模板代码。比如排序问题,可以对int型数据和cha型数据进行排序。在不引入模板的情况下,需要编写两次排序函数。引入模板后,可以在实例化时根据不同的数据类型实例化排序方法。

缺点:

某些 C++ 编译器尚不支持模板。使用这些编译器编译包含模板的代码时,会出现不兼容的问题。

不支持单独编译,所有使用基于模板的算法的实现都必须包含在整个设计的头文件中。

相关阅读Relate

  • 法国签证营业执照翻译件模板 你与申根签证只有一条推送的距离
  • 江苏省增值税发票翻译模板 江苏税务局出口货物退(免)税申报管理系统软件
  • 肄业证书翻译模板 复旦大学学生学业证明文书管理细则(试行)
  • 四级英语作文模板带翻译 大学英语四级翻译模拟训练及答案
  • 社会某信用代码证翻译模板 js验证某社会信用代码,某社会信用代码 验证js,js+验证+社会信用代码证
  • 美国移民证件翻译模板 日语签证翻译聊聊身份证翻译模板
  • 翻译软件模板 人类史上*实用的的文档快速翻译指南
  • 江苏省增值税发票翻译模板 江苏出口货物退(免)税申报管理服务平台
  • 瑞士签证房产证翻译件模板 瑞士探亲签证—就读子女
  • 日语户口本翻译模板 户口本翻译价格_户口本翻译一般多少钱?
  • 模板偏特化翻译 09 非类型模板参数、模板的特化、分离编译 www.chinazxzy.com/fymb/4976.html
    
    本站部分内容和图片来源于网络用户和读者投稿,不确定投稿用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的权利,请联系:chinazxzy@163.com,及时删除。
    Go To Top 回顶部
    • 扫一扫,微信在线