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