函数模板和类模板

一、函数模板

函数模板是C++中一种重要的特性,它允许我们编写一个通用的函数,该函数可以处理不同类型的参数。通过使用模板,我们可以减少代码的冗余,并提高代码的复用性。

例如,在写交换函数swap时,对于不同类型的两个数据的交换,我们就要写很多个,但是有了函数模板就不必了,函数模板是写给编译器的,当我们调用函数时,编译器会为我们生成对应的函数。

接下来看看函数模板的用法:

要写函数模板,需要关键字template,然后后面跟<>,class和typename是定义模板参数的关键字,写哪个都可以,没有区别,后边的T、U等就是 对应的类型。

例如swap函数模板:

template<typename T>
void Swap(T& x, T& y)
{
	T t;
	t = x;
	x = y;
	y = t;
}

 接下来看例子进行说明:

template<typename T>
T Add(T x, T y)
{
	cout << "T Add(T x, T y)" << endl;
	return x + y;
}

int Add(int x, int y)
{
	cout << "int Add(int x, int y)" << endl;
	return x + y;
}


template<typename T1, typename T2>
auto Add(T1 x, T2 y)
{
	cout << "auto Add(T1 x, T2 y)" << endl;
	return x + y;
}

当有多个函数模板存在时,我们调用时会调用哪一个呢?

 

从这个例子 可以看到,当有现成的函数时,就会直接使用现成的(在上例中是int Add(int x,int y)),当没有现成的时,就会使用函数模板,在上例中有两个函数模板,但是对于Add(1.1,2.2)来说,两个参数类型相同,用第一个函数模板更适合,而对于Add(1,2.2)来说,没有现成的,并且两个函数模板中第二个更适合,所以调用第二个。

如果不提供函数模板,只有int Add(int 下,int y)呢?

也是可以运行的,只是会有警告:

 函数模板的实例化:

有隐式实例化和显式实例化。

隐式实例化:让编译器根据参数类型自己推演模板参数的实际类型

显式实例化:在函数名后加<>,并且在里面写上实际类型,例如Add<int>(1.1,2.2);

二、类模板

类模板是C++编程语言中的一个功能,它允许程序员定义一种“通用”或“万能”的类,这个类可以处理多种不同的数据类型。通过类模板,程序员可以编写一次代码,然后用于多种不同的数据类型,这大大提高了代码的重用性和灵活性。

类模板的定义格式:

template<class T1,class T2...>

class 类模板名

{

     //类内成员定义

};

类模板的定义与普通的类定义相似,只需要把相应的类型换成T1、T2....就可以了。

需要注意的是:类模板中函数在类外定义时,需要加模板参数列表,类模板实例化时需要在类模板名字后面加<>,然后将实例化的类型放在<>中,如下图(来自文心一言):

注意:模板不建议将声明和定义分离到.h和.cpp中, 会出现链接错误。

区分类模板和模板类:

类模板不是真正的类,而模板类是在确定了模板参数后的实例化结果。

相关推荐

  1. PyTorch中模块函数的命名调用

    2024-04-28 07:42:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-28 07:42:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-28 07:42:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-28 07:42:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-28 07:42:02       20 阅读

热门阅读

  1. FFMpeg - macOS build 报错 : xcrun -sdk iphoneos clang ...

    2024-04-28 07:42:02       13 阅读
  2. 打水问题(贪心算法)

    2024-04-28 07:42:02       11 阅读
  3. hive创建hbase外部关联表实例

    2024-04-28 07:42:02       12 阅读
  4. liunx 中 if 条件 语句

    2024-04-28 07:42:02       12 阅读
  5. 第三方登录以及微信小程序一键登录的实现方案

    2024-04-28 07:42:02       10 阅读
  6. 华为FusionCompute简介

    2024-04-28 07:42:02       20 阅读
  7. golang wire 依赖注入

    2024-04-28 07:42:02       11 阅读