关于c++模板的一些东西

template 和 template 的意思是相同的,

typename在此处就是为了防止class在此处的定义和类的class混淆, 初次之外,typename还有另一个用处(用做嵌套类型)

#include 
#include 

using namespace std;

template  > class Seq>
void printSeq(Seq &seq)
{
	for(typename Seq::iterator b = seq.begin(); b != seq.end();) {
		cout << *b++ << endl;	
	}	
}

int
main()
{
	vector v;
	
	v.push_back(1);
	v.push_back(2);

	printSeq(v);

	return 0;
}

iterator是类型T的一个嵌套类型,为了使编译器理解这种行为,需要用typename对其进行说明。


<函数模板>


函数模板和模板函数意思是一样的

template 
T func(T x, T y)
{
	
}

<类模板>

template 
class Foo {
public:
	T get_member();
	void set_member(T tmp);
private:
	T member;
};

<模板和编译器>

模板的定义和实现必须放置在一个文件中,这样编译器才不会报错误。这自然而然引出一个争议,定义和实现是一起放在头文件还是一起放在.cpp文件中?

我们看头文件,一般来说, 不分配的内存的都放在头文件(声明等),模板只有在其被实例的时候才分配了内存,所以放在头文件是基本合理的(吧)。

目前的编译器都是模板包含模型,声明和实现分离的还暂时不是主流




你可能感兴趣的:(c++)