//类模板的别名
typedef Blob<string> StrBlob;
template<typename T>
using twin = pair<T, T>;
twin<string> authors;//authors是一个pair<string,string>
//定义一个模板类型别名时,可以固定一个或多个模板参数
template<typename T> using partNo = pair<T, unsigned>;
partNo<string> books;//books是一个part<string,unsigned>
partNo<int> books;//books是一个part<int,unsigned>
//类模板的static成员
//与任何其他static数据成员相同,模板类的每个static数据成员必须有且仅有一个定义。
//类模板的每个实例都有一个独有的static对象。
template<typename T>
class Foo {
public:
static std::size_t count() { return ctr; }
private:
static std::size_t ctr;
};
template<typename T>
size_t Foo<T>::ctr = 0;//定义并初始化ctr
int main()
{
//类模板的静态成员
//与非模板类的静态成员相同,可以通过类类型对象来访问一个类模板的static成员,也可以使用作用域运算符直接访问成员。
Foo<int> fi;//实例化Foo<int>类和static数据成员ctr
auto ct = Foo<int>::count();//实例化count
ct = fi.count();//使用Foo<int>::count
//ct = Foo::count();//错误的 不知道使用的那个模板实例的count
return 0;
}