1. 程式人生 > >C++11 理解 (十五) 之 模板的別名

C++11 理解 (十五) 之 模板的別名

在進入這個主題之前,各位應該先弄清楚“模板”和“型別”本質上的不同。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 將會增加以下的語法:

template< typename first, typename second, int third>
class SomeType;
 
template< typename second>
using TypedefName = SomeType<OtherType, second, 5>;

using 也能在 C++11 中定義一般型別的別名,等同 typedef

typedef void (
*PFD)(double); // 傳統語法 using PFD = void (*)(double); // 新增語法