C++11 理解 (十五) 之 模板的別名
阿新 • • 發佈:2019-02-16
在進入這個主題之前,各位應該先弄清楚“模板”和“型別”本質上的不同。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); // 新增語法