函数模板和类模板的基础使用。类模板里定义函数模板。

函数模板的使用

函数模板的格式

        格式:template<typename 自定义通用类型名>
        返回值 函数名(参数){ }
例如:template< typename T>
   void fun(T a,T b){ }

typename -----表明后的类型是一个通用类型,或许叫做虚拟类型
T1------------通用类型或者虚拟类型,(理解成类型)可以在函数中直接当做普通类型使用。

        其中typename也可用class替代,两者用法上的区别可以参考此文章: 链接

函数模板的调用

        第一种 显式类型推导: 函数名 <实际类型1,实际类型2>(参数列表);

        第二种 隐形类型推导: 函数名(参数);

        注意:显示类型推导 参数和推导的类型必须一致。模板函数,在调用时可以用显示调用,省略类型的方式,例如:fun<>(参数列表)

类模板的使用

类模板的格式

        格式:template< typename T>
        class test { T age; };
        实例化: 类名<类型> 变量名(参数);

类模板和函数模板区别

        第一:函数模板可以使用隐式类型推导,但类模板不可以,必须显示推导。

        第二:类模板在定义template时候,可以加上默认参数。template<class T1,class T2=string>;

        第三:在模板中的默认参数类型中,如果所有模板参数都是缺省,但在类进行实例化的时候,尖括号不可以省略。

如何把类模板作为参数传入函数中

类模板作为参数大致有三种传入方式:
       一、直接传入模板对象
void fun(person<string, int>& per)
       二、类模板传入方式
template <class T1,class T2>
void fun3(person<T1,T2>& per)
       三、整个类模板化
template
void fun4(T& per)
部分代码:

//第一种方式,直接传入模板对象
void fun(person<string, int>& per)
{
	per.personShow();
}
//类模板传入方式
template <class T1,class T2>
void fun3(person<T1,T2>& per)
{
	per.personShow();
	//在函数调用的时候,查看一下传入的T1和T2的类型
	cout << typeid(T1).name() << " " << typeid(T2).name() << endl;
}
//整个类模板化
template <class T>
void fun4(T& per)
{
	per.personShow();
	cout << typeid(T).name() << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值