模板默认类型参数
可以为类模板的类型参数指定一个默认类型
类模板默认类型参数定义
template<typename T = int>
class Stack{
...
};
类模板默认类型参数使用
<>中无类型,即为默认类型。
Stack<> stack;
局限性
- 默认类型只局限于类模板使用,函数模板不能使用默认类型。
非类型参数
定义
template <typename T,int size>
class Stack{
private:
T element[size];
}
size便为非类型参数,非类型参数的类型可以是一个类。
使用
实例化模板时,非类型参数传进来的实参应该是一个对象。
Stack<char,100> stack;
标准库使用案例
std::array<int,100> list;
模板与继承
模板继承规则
- 非模板类可以从一个模板类的实例继承下来。
- 模板可以从普通的类继承下来
- 类模板可以继承类模板
注:类是不能继承模板的。
何时何地使用模板
- 使用别人写好的模板库
STL
Boost库 - 对不同类型的数据做类似处理
- 不要过量使用模板
到底使用面向对象编程(OOP)还是使用泛型编程(GP)
几乎整个c++标准库都是依赖于泛型编程的,较少使用继承和运行时多态。
异常、字符、IO流里使用了较多的继承。