C++11 Alias Template(template typedef)化名,Alias,换一个名称

本文探讨了C++中使用`using`关键字创建容器别名的优势,如简化类型定义,并指出宏定义和typedef无法实现相同效果。同时,文章详细解释了在函数中获取容器元素类型的方法,以及模板模板参数的概念。尽管如此,当涉及容器特化和偏特化时,仍需要直接操作原始类型。此外,还提到了在函数内部使用别名的限制。
摘要由CSDN通过智能技术生成

在这里插入图片描述

(1)using Vec=std::vector<T,MyAlloc>,创建容器时自动默认选择alloc,如果自己写的迭代器就每次都要<T,MyAlloc>,在using Vec之后,就可以直接用Vec来代替;
(2)而使用define宏定义和typedef是无法达到这个效果的;
(3)不能对化名,来进行特化和偏特化,还是需要对原来的对象进行特化,化名只是一个名字,不代表本尊;

在这里插入图片描述
(1)左侧版本天方夜谈:因为传入的参数是一个容器(类型),但接收的是一个容器对象object,函数体中对容器类型进行区分,不太对。。。左侧有报错信息;
(2)右侧改善,传过去的是一个对象object,修改为list<>(),建立一个临时对象;然后推导出对象的类型;然后用这个类型;但是还是不对,编译器报错:Container不是模板,修改为typename Containerc,依旧报错,因为typename默认会有::;
(3)修改改善的版本如下:
在这里插入图片描述
(1)传入的是一个容器的对象object,需要在函数中取出容器的元素类型,函数第一行首先取出容器中的iterator迭代器,然后使用迭代器萃取机提问value type从而获得容器内的元素类型;
(2)如果没有iterator和traits呢?不死心继续尝试第一种的想法,模板接收一个模板template参数Continer,Container本身又是一个class template类模板,能取出Container的template参数。例如收到vector,能够取出其元素类型string;->模板模板参数

template template parameter模板模板参数

在这里插入图片描述
(1)template
class Container是模板的模板参数;
这样写更加清晰,它本身也是一个类模板;
(2)报错,在Contianer处,期望是一个template<class _Tp,class _Alloc>class std::vector;需要自己写一个迭代器;解决方法就是化名!!!
在这里插入图片描述
(3)注意:这些化名不可以写在function之内的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值