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

来源:互联网 发布:linuxssh端口号配置 编辑:程序博客网 时间:2024/05/20 07:53

<typename 和 class>

template <class T> 和 template <typename T>的意思是相同的,

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

#include <iostream>#include <vector>using namespace std;template <class T, template<class U, class = allocator<U> > class Seq>void printSeq(Seq<T> &seq){for(typename Seq<T>::iterator b = seq.begin(); b != seq.end();) {cout << *b++ << endl;}}intmain(){vector<int> v;v.push_back(1);v.push_back(2);printSeq(v);return 0;}

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


<函数模板>


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

template <typename T>T func(T x, T y){}

<类模板>

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

<模板和编译器>

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

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

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




原创粉丝点击