模板初阶(2):函数模板的匹配原则,类模板的实例化

简介: 模板初阶(2):函数模板的匹配原则,类模板的实例化

一、函数模板的匹配原则

int Add(const int& x, const int& y)
{
  return x + y;
}

template <class T>
T Add(const T& x, const T& y)
{
  return x + y;
}

int main()
{
  int a1 = 1, a2 = 2;
  Add(a1, a2);

  double d1 = 1.1, d2 = 2.2;
  Add(d1, d2);

  return 0;
}
  • 一个非模板函数可以和同名的函数模板同时存在。
  • 匹配原则:
  1. 匹配合适的情况下,编译器会优先调用非模板函数,而非通过模板实例化出一个新的函数。
  2. 如果模板能实例化出匹配更好的函数,则优先模板
  3. 普通函数支持隐式类型转换。


二、类模板的实例化

template <class T>
class Stack
{
public:
  Stack(int n = 4)
    :_top(0)
    ,_capacity(n)
  {
    cout << "Stack(int n = 4)" << endl;
    _a = new T[n];
  }

  ~Stack()
  {
    cout << "~Stack()" << endl;
    delete _a;
    _a = nullptr;
    _top = _capacity = 0;
  }

private:
  T* _a;
  int _top;
  int _capacity;
};


int main()
{
  Stack <int> s1;    // 1. 类名 <数据类型> 才是实例化类的类型
  Stack <double> s2; // 2. 显式实例化的类型不同,它们就是不同的类

  return 0;
}
相关文章
|
30天前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
36 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
5月前
|
C++
C++类和类模板——入门
C++类和类模板——入门
38 1
|
4月前
|
算法 编译器 程序员
|
5月前
|
编译器
模板初阶(1):函数模板,类模板
模板初阶(1):函数模板,类模板
|
存储 算法 安全
04-📝C++核心语法|面向对象2【友元、内部类与局部类、强化训练(数组类封装)、运算符重载、仿函数、模板、类型转换、 C++标准、错误&&异常、智能指针】
复习`C++核心语法`,且适当进行汇编探索底层实现原理,进一步夯实基础,为以后的`底层开发`、`音视频开发`、`跨平台开发`、`算法`等方向的进一步学习埋下伏笔。
04-📝C++核心语法|面向对象2【友元、内部类与局部类、强化训练(数组类封装)、运算符重载、仿函数、模板、类型转换、 C++标准、错误&&异常、智能指针】
|
6月前
|
算法 编译器 C++
【C++ 模板编程 基础知识】C++ 模板类部分特例化的参数顺序
【C++ 模板编程 基础知识】C++ 模板类部分特例化的参数顺序
39 0
|
6月前
|
编译器 C++
C++函数模板:函数模板与特例化解析
C++函数模板:函数模板与特例化解析
63 2
|
编译器 C++
C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化(2)
C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化
128 0
|
编译器 C++
C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化(1)
我们先来思考一个问题,如果有人让你实现一个通用的交换函数你们会怎么做?有的小伙伴会说,我会使用函数重载的方式,把每一种类型重载,但…难道就没有更容易的办法,不用敲那么多次吗?ok,就来看看我们今天要介绍的模板,能很好的帮你解决这个问题。
165 0
|
算法 编译器 C++
C++学习笔记(九)——模板初阶(泛型编程基础,函数模板,类模板)
C++学习笔记(九)——模板初阶(泛型编程基础,函数模板,类模板)
C++学习笔记(九)——模板初阶(泛型编程基础,函数模板,类模板)