常量表达式与默认参数值

Template参数并不一定非得是某种类型,也可以用常量表达式

  1. template<int len>
  2. class num_sequenc{
  3. public:
  4. num_sequece(int beg_pos=1);
  5. };
  6. template<int len>
  7. class Fibonacci:public num_sequence<len>{
  8. public:
  9. Fibonacci(int beg_pos=1):num_sequence<len>(beg_pos){}
  10. };
  11. Fibonacci<16> fib1;

以Template作为一种设计策略

对仿函数(function object)也可以采用template的形式进行设计;此外,因为有些自定义类的比较操作并未定义,也可以通过通过template的机制,将相应的仿函数(谓词)以参数的形式传递进来;

  1. template <typename elemType, typename Comp=less<elemType>>//函数对象or谓词,默认为less
  2. class LessThanPred{
  3. public:
  4. LessThanPred(const elemType &val):_val(val){}
  5. bool operator()(const elemType &val)const {
  6. return Comp(val,_val);
  7. }
  8. private:
  9. elemType _val;
  10. }

Member Template Function

小结

  • 模板可以采用常数表达式,而非一定得是某种具体的类型
  • 仿函数(谓词),也可做为模板传入;