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

编程入门 行业动态 更新时间:2024-10-14 16:25:28

C++11 Alias Template(template typedef)<a href=https://www.elefans.com/category/jswz/34/1677629.html style=化名,Alias,换一个名称"/>

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

(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之内的

更多推荐

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

本文发布于:2024-02-10 22:24:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1677626.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:化名   换一个   名称   Alias   Template

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!