说明:本文转自 http://blog.csdn.net/y_xianjun/article/details/10214451
在进入这个主题之前,各位应该先弄清楚“模板”和“类型”本质上的不同。class template (类型模板,是模板)是用来产生 template class (模板类型,是类型)。
在标准 C++,typedef
可定义模板类型一个新的类型名称,但是不能够使用 typedef
来定义模板的别名。举例来说:
template< typename first, typename second, int third>
class SomeType;
template< typename second>
typedef SomeType<OtherType, second, 5> TypedefName; // 在C++是不合法的
这不能够通过编译。
为了定义模板的别名,C++11 将会增加以下的语法:
<pre name="code" class="cpp">template< typename first, typename second, int third> class SomeType; template< typename second> using TypedefName = SomeType<OtherType, second, 5>;
using 也能在 C++11 中定义一般类型的别名,等同 typedef:
<pre name="code" class="cpp">typedef void (*PFD)(double); // 傳統語法 using PFD = void (*)(double); // 新增語法