C++ Template初探:以模板为参数的模板

以模板为参数的模板,顾名思义,就是定义了一个新的模板,这个模板的参数不是类,而是另一个模板,用例子说明就很简单了:

template<size_t size>
class A {
public:
	void print(){ cout<<"A size = "<<size<<endl; }
};

template<size_t size>
class B {
public:
	void print(){ cout<<"B size = "<<size<<endl; }
};

template<size_t size, template<size_t> class U = A >
class C{ 
	U<size> u; 
public: 
	void print(){u.print();}
};
这里首先定义了一个类模板 A,该模板有一个整数参数,该参数又有一个默认值 10。 A是一个普通的模板,其用法很简单,像 A<>  a 或 A<100>  a,这样就得到了一个A的实例化类对象。同样,我们定义了一个与A很相似的模板B(B的用途会在稍后说明),接着我们定义了一个新的类模板 C,该模板有两个参数,第一个参数是一个整数,第二参数是一个模板,这就是所谓的以模板为参数的模板,因为它的参数中出现了模板,而不仅仅是整数或类型,可以看到,我们可以在C中像使用普通模板一样使用U,在这里我们给了U一个默认参数:A。下面我们看一下C可以怎么用:

C<100> c1;
c1.print();
C<200,B> c2;
c2.print();
因为C中提供了默认参数,所以在实例化C的时候可以不提供该参数而使用默认参数,像 C<100>  c1; 当然,我们也可以提供一个模板作为参数,像 C<200, B>  c2;  输出结果如下:

A size = 100
B size = 200

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值