C/C++基础----模板

函数模板和模板函数

  同前面的指针函数和函数指针类似,函数模板和模板函数也具有相似的关系,函数模板是一个模板,模板函数是由函数模板所产生的函数。函数模板需要使用关键字template来声明。

#include<iostream>
#include<stdio.h>
using namespace std;
//声明函数模板
template<typename T>
void add(T x, T y)
{
	cout << x + y << endl;
}
//一个全特化的函数模板
template<>
void add<const char *>(const char * x, const char * y)
{
	printf("%s %s", x, y);
}

int main()
{
	//由函数模板产生模板函数
	add<int>(5, 2);
	add<float>(5.2, 2.5);
	add<const char*>("hello", "world\n");

	system("pause");
	return 0;
}

在这里插入图片描述

函数模板的全特化

  函数模板的全特化,是函数模板的一种特殊情况,在该情况下,不需要指明模板函数的参数,而是直接将函数模板给出一个固定的值。就如上面的代码中,实现的功能。

类模板

 &emsp;类模板就是对类的进一步抽象,和函数模板类似,完成类模板后,只需指定参数,就能完成生成模板类,一个模板类只能在头文件中实现。

头文件
#pragma once
template<class T>
class  Rect
{
public:
	T get_data(int idx);


	T arr[10];
};

template<class T>
T Rect<T>::get_data(int idx)
{
	return arr[idx];
}
主函数
#include<iostream>
#include<stdio.h>
#include "Rect.h"
using namespace std;

template<typename T>
void add(T x, T y)
{
	cout << x + y << endl;
}

template<>
void add<const char *>(const char * x, const char * y)
{
	printf("%s %s", x, y);
}

int main()
{
	add<int>(5, 2);
	add<float>(5.2, 2.5);
	add<const char*>("hello", "world\n");
	
	Rect<int> R1;
	for (size_t i = 0; i < 10; i++)
	{
		R1.arr[i] = i;
	}

	cout << "get_data is " << R1.get_data(5) << endl;
	system("pause");
	return 0;
}

在这里插入图片描述

类模板的全特化和偏特化

  类模板的全特化和偏特化与函数模板的全特化类似。并且类模板可以继承自类模板。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值