MISC
使用别名
我们可以使用typedef来给一个模板类定义别名
typedef Blob<string> StrBlob
在C++11中, 我们也可以为类模板定义别名
template<typename T> using twin = pair<T,T>;
twin<string> authors; //authors的类型是pair<string, string>
typename的作用
typename用来告诉模板如何解析T::foo此类的代码。上一节可知类模板可以有静态成员,那么T可以指代一个模板类,即存在Foo<int>::foo的代码,其中foo为一个静态成员。但是同样的代码也可以指代某个类的类型成员,比如我们前面Blob类中的Blob<T>::size_type。因此编译器无法知道T::foo表示的到底是哪一种情况,此时需要typename来显式的告诉编译器foo是一个类型而非变量。
template<typename T>
struct Obj {
using type = T;
};
template <typename T>
void f() {
typename Obj<T>::type var;
}
上面的例子可以很直观的看出这一点,当编译器在编译 typename Obj<T>::type var;时,会将Obj<T>::type认为是某种类型。如果不加typaname,编译器则会将Obj<T>::type var理解为访问Obj<T>的静态成员,从而报错。
### Dot Template