C++模板编程


757 浏览 5 years, 11 months

2.9 模板别名(仅限C++11)

版权声明: 转载请注明出处 http://www.codingsoho.com/

模板别名(仅限C++11)

前面介绍了typedef的概念。通过typedef可以给特定类型赋予另一个名称。例如可以编写以下typedef:

typedef int MyInt;

上面的typedef给int类型赋予了另一个名称,因此在定义整数的时候可以不使用int而是使用MyInt,如下所示:

MyInt i= 123;

当然,原始类型int依然存在,仍然可以用于类型说明。类似地,也可以通过typedef给模板化的类赋予另一个名称。 然而,C++要求指定每个模板类型的具体类型。

下面通过例子进行阐述。考虑下面这个使用了模板的类:

template<typenameT1, typenameT2>
class MyTemplateClass{/*…*/};

如果要通过typedef给MyTemplateClass定义另一个名称,那么必须给出T1和T2的具体类型。 例如:

typedef MyTemplateClass<int, double> OtherName;

C++不允许像下面这个示例代码这样只指定一个类型:

template<typenameT1>
typedef MyTemplateClass<T1double> OtherName//Error

C++11引入了模板别名(template alias),从而取消了这个限制,如下所示:

template<typenameT1>
using OtherName=MyTemplateClass<T1, double>

要特别注意这个语法。新的类型名称OtherName应该在模板别名语法的前面,而在typedef语法中则应该在最后面。这个模板/类型别名的语法可用于替换之前的typedef语法,不用考虑是否使用了模板。 例如:

using MyInt=int;

这一行代码完全等同于:

typedef int MyInt;