类模板的分离编译

本文探讨了C++类模板的两种模式:包含模式和分离模式。类模板的分离模式允许将成员函数的定义放在.cpp文件中,但会引发编译时的链接错误。解决这个问题的关键在于理解模板的实例化发生在程序运行时,因此需要在包含头文件的同时也包含.cpp文件,以确保编译器能找到成员函数的定义。
摘要由CSDN通过智能技术生成

  一直觉得模板类是特别神奇的东西,它可以构造出不同类型的对象,使代码更加的灵活。这个过程就是类模板的实例化。

  我们使用类的模板写一个stack类:

#include<assert.h>
#include"Seqlist1.h"
using namespace std;
template<class T,template<class> class Container  = Seqlist>
class Stack
{
public:
	void Push(const T& x)
	{
		_con.Pushback(x);
	}
	void Pop()
	{
		_con.Popback();
	}
	bool Empty()
	{
		return Size() == 0;
	}
	size_t Size()
	{
		return _con.Size();
	}
	T& Top()
	{
		size_t size = Size();
		assert(size > 0);
		return _con[size - 1];
	}
	void print()
	{
		_con.Print();
	}
	T& operator[](size_t index)
	{
		return _con[index];
	}
protected:
	Container _con;
};

  其中我们可以传入不同类型的T,class Continer是类型T的一个容器,这里默认是用自定义的一个顺序表来当容器。编译器就会构造出不同的代码出来。

  这样的实现方式是在类内定义成员函数,并把整个类放在.h中,这种方式叫做类模板的包含模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值