C++ template 模板笔记记录

本文深入解析C++模板的概念,包括函数模板与类模板的定义、使用及实例化过程。探讨了模板实例化机制,解释了为何类成员函数模板不能作为虚函数,并介绍了如何将函数模板声明为inline或constexpr。此外,还讨论了类模板的特化,以及在类模板中声明类外实现函数的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ template 模板笔记记录

模板实例化:模板的定义本身不参与编译,而是编译器根据模板的用户使用模板时提供的类型参数生成代码,再进行编译,这一过程称为模板实例化

一、 函数模板
1.定义:就是把处理不同类型的公共逻辑抽象成函数,就得到了函数模板
template<typename T>
T cmp(const T& a, const T& b)
{
	return max(a,b);
}

1.为什么类成员函数模板不能是虚函数?
编译器都期望在处理类的定义的时候就能确定这个类的虚函数表的大小,如果允许有类的虚成员模板函数,那么就必须要求编译器提前知道程序中所有对该类的该虚成员模板函数的调用,而这是不可行的。

2.函数模板可以声明为inline或constexpr,将它们放在template之后,返回值之前即可。

3.函数模板可以推断实力化,但是类模板不可以,只能自己指明类型参数

二 、类模板
template <typename T>
classs Stack
{
private: 
	vector<T> elems
public:
	void Push(const T& a)
	{
		elems.push_back(a);
	}	
		
	void pop(){}
	void top() const{}
	void empty(){}
};

1.如果类内声明类外实现函数的话需要每次添加template 和类名作用域
2.类内部定义的static变量的值只会影响到同类型的变化
3.类模板的特化:因为类模板中的定义不一定适用于所有数据类型,所以针对此类型应该重新定义,即所谓类模板的特化。如果要特化一个类模板,自然要特化此类模板所有的成员函数。
特化的类上面应该加着template<>并且特化后的类的类型应该将T换成具体的数据类型
形如:

template<>
class Stack<std::string>{};

注意:以上的代码不可以运行,我这里只是为了自己做笔记,想看结果的自己实现一下即可

参考博文:

《C++ Templates》笔记——2.类模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值