常量表达式与默认参数值
Template参数并不一定非得是某种类型,也可以用常量表达式
template<int len>
class num_sequenc{
public:
num_sequece(int beg_pos=1);
};
template<int len>
class Fibonacci:public num_sequence<len>{
public:
Fibonacci(int beg_pos=1):num_sequence<len>(beg_pos){}
};
Fibonacci<16> fib1;
以Template作为一种设计策略
对仿函数(function object)也可以采用template的形式进行设计;此外,因为有些自定义类的比较操作并未定义,也可以通过通过template的机制,将相应的仿函数(谓词)以参数的形式传递进来;
template <typename elemType, typename Comp=less<elemType>>//函数对象or谓词,默认为less
class LessThanPred{
public:
LessThanPred(const elemType &val):_val(val){}
bool operator()(const elemType &val)const {
return Comp(val,_val);
}
private:
elemType _val;
}
Member Template Function
小结
- 模板可以采用常数表达式,而非一定得是某种具体的类型
- 仿函数(谓词),也可做为模板传入;