为什么C ++ 11中没有模板化的typedef?

时间:2017-03-03 08:32:52

标签: c++ c++11 templates typedef using

为什么委员会决定不批准模板typedef以及模板using

template <class T>
using my_vector = std::vector<T>;

是合法的。

但是

template <class T>
typedef std::vector<T> my_vector<T>;

是非法的?

UPD。问题Why does C++11 not have template typedef?没有回答。

1 个答案:

答案 0 :(得分:10)

引用提案 C ++的模板别名 N1489 Emphasis Mine ):

  

有人建议(重新)使用关键字typedef - 如论文[4]所述 - 介绍模板别名:

template<class T>
typedef std::vector<T, MyAllocator<T> > Vec;
     

该符号具有使用已知关键字的优势   引入一个类型别名。但是,它还会显示几个   使用已知关键字的混淆的不利之处   在别名的上下文中引入类型名称的别名   不是指定类型,而是指定模板; Vec不是a的别名   类型,不应该用于typedef - 名称。名称Vec是一个   家庭的名称std::vector<., MyAllocator<.>> - 子弹的位置   类型名称的占位符。 因此我们不建议使用“typedef”   语法。

     

[4] Herb Sutter,Typedef模板,文件号。 WG21 / 1406。