模板小结

 1.c++支持的2种泛型和变化

 a. 类模板

    全局特化和局部特化

   模板实参是显示指定的

template <typename T,typename T2>

 class stack{

};

template <>

class stack<int>

{

};

template <typename T>

class stack<T,T>

{

};

 

stack<double,int>//类型  s1;

 

 b. 函数模板

   指定模板调用,模板参数演绎和显示指定

template <typename T>

T max(T const & , T const& );

 

max<int>(3,4);

max<>(3,4);

 

c.变形:

 成员函数模板

 嵌套类模板

 

成员函数模板:

template <typename conf>

void print();

 

template <typename T>

template <typename conf>

void stack<T>::print();

 

 

stack<int> a;

a.print<double>();

 

非类型模板参数

模板参数可以做模板实参

默认模板参数(在gcc 上 只有类模板能有默认模板参数,函数模板不能有默认参数)

template <typename T,typename T2=T,T size=T()>
class stack1
{

private:
public:
    template <typename T3> void print();


};

 

成员函数模板不能为虚函数

类模板非模板成员函数可以为虚函数

 

 

2.模板参数

a.类型参数

b.非类型参数(只能是常整形,指针类型(对象指针,函数指针,类成员的指针),引用类型(对象的引用,函数的引用))

c.模板的模板参数(只能是类类型)

 

typename T: 如果 T 后面用不到,则 可省略T

而 T 在后面使用中就不能加 class 修饰(class 和 typename 基本是等价的)

所以在 模板中使用

friend class T; //错误

 

 

 

 

 

模板的模板参数

需要注意的是概念

模板参数 是 模板,而不包含模板的参数

exp.

 template <template <typename T> class conf>

void test()

{

  conf<T> a;//错误,T 在这里是不可见的

  conf<int> b;//ok

}

test<stack>();//ok

T 只是占位符号

作用域 只在模板之中,只能用在自身之中

template <typename T, template <typename T1=T, T1* > class conf > 

class stack

{

};

 

 

 

 

 

 

以上为 gcc 4.4.1 编译通过!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值