最近读c++ template的前几章的时候,几种常用的template类浮现在眼前,下面总结一下。
1. Function Template 函数模版
template<class T>
void Example(T param1, T param2);
2. Class Template 类模版
template<class T>
class Example{
private:
T item;
};
3. notype template 无类型模版
template<typename T, int max>
class Example{
private:
T * item;
public:
Example(){item = new T[max]}
};
在这max是一个非类型模版,对于非类型模版有一个限制,就是非类型模版的类型只能是整型,也就是max这个必须是整型,
这样我们可以传递一个指针地址,因为它本身也是一个四个字节的整型。但是有一个需要特别注意的是,当你传递一个指针地址
的时候,这个指针内容必须是extern类型的,不能是internal的,如果传递的是internal的话,将导致变异时候的错误。
例如如下:
const char p[] = {"23123123"};
template <class T, const char *>
class Example{
};
Example<int, p> tmp;
tmp将报错,因为p是一个internal。如果在const char p[]之前加一个extern关键字,将p定义一个外部的,则编译将通过。