8.Alias Template(模板别名)

  下图中通过使用using Vec = std::vector<T,MyAlloc<T>>进行模板别名的定义,从而可以直接使用Vec<int> coll来代替上一句话,这种方法类似于C++中的typedef,但这种C++11的新机制不仅仅是为了通过设置模板别名来少写几个字,且其也无法通过typedef或#define代替,如图中下方所示。


为了实现下图中红框中的形式的函数调用接口,图中两种做法都会编译报错。


为此只能通过如下图中黄色框内文字所述,通过容器迭代器的traits(类型萃取机制)可以得到类型,这样可以实现,但是其接口的形式只能是test_moveable(list<MyString>())这样写,不是我们想要的接口形式。


为此,又考虑到template template parameter(模板模板参数)这种高级模板版用法,但是,这样子写,在调用这个类得构造函数时(XCls<MyString,vector> c1),编译出错,原因是红圈中所示,vector的模板参数其实有两个,第一个是类型,第二个是Allocator,虽然平时使用vector时,Allocator有默认值,因为编译器会自动进行模板参数推导,但是当使用模板模板参数时,并且第二个模板参数是以第一个为参数时,编译器就不能自动推导,为此,该方法还是实现不了。


最终,只有使用Alias Template来实现,红圈中所示为我们想要的接口。






  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值