Basic template terminology

是class template还是template class

C++中struct,classes,unions统称为class types
class types包括unions,而class不包括unions

具现化(Instantiation)与特化(Specialization)

  • 在template中,以实际值作为template arguments,从而产生常规的class,function或者member function,这个过程为template的具现化
  • 显示特化,偏特化,当我们讨论特化时,常把最广泛的那个template称为primary template(柱模板或者原始模板)

宣告和定义

在两种情况下宣告会变成定义
- 当他们的细节被写明白
- 当编译器必须为变量配置内存空间


单一定义规则(One-definition rule,ODR)

基本规则
- Non-inline函数和成员函数,以及全局变量和static成员变量,在整个程序中只能定义一次
- class型别(包括unions)及inline函数,在每个编译单元中最多只能定义一次,如果跨越不同的编译单元,其定义必须完全相同。
- 编译单元是指源代码中所设置的所有文件,也就是#include指令所包含的所有文档。
- 可链接物是:non-inline函数或non-inline成员函数,全局变量,static成员变量,以及所有由template代码产生的上述四个物体(entity)


Template arguments(模板引数) VS template parameters(模板参数)

template <typename T, int n>
class Array
{
public:
    T array[N];
}

class DoubleArray
{
public:
    double array[10];
}

Array<double, 10> ad;
  • 代码最后一行,template名称后紧跟角括号括起来的template arguments
  • 无论这些template arguments本身是否依赖template parameters,我们把template name + 大括号括起的template arguments组合体称为template-id

在学界,引数(arguments)有时被称为实际参数(actual parameters),参数(parameters)有时被称为形式参数(formal parameters)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值