为什么委员会决定不批准模板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?没有回答。
答案 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。子>