七、类模板的static成员
类模板可以像任意其他类一样声明static成员。
templateclass Foo { public: static std::size_t count() { return ctr; } private: static std::size_t ctr; };
定义了名为Foo的类模板,它有一个名为count的publicstatic成员函数和一个名为ctr的privatestatic 数据成员。
Foo类的每个实例化[谨记:不是每个对象]都有自己的static成员:
Foofi,fi2,fi3; Foo fs;
每个实例化表示截然不同的类型,所以给定实例化所有对象都共享一个static成员。因此,Foo
1、使用类模板的static成员
通常,可以通过类类型的对象访问static成员或者使用作用域操作符直接访问static成员。当然,当试图通过类使用static成员的时候,必须引用实际的实例化:
Foofi,fi2; size_t ct = Foo ::count(); ct = fi.count(); ct = fi2.count(); ct = Foo::count(); //Error:不知道运用哪个实例化
注:static成员函数只有在程序中使用时才进行实例化。
2、定义static成员
像使用任意其他static数据成员一样,必须在类外部出现数据成员的定义。在类模板含有static成员的情况下,成员定义必须指出它是类模板的成员:
templatestd::size_t Foo ::ctr = 0;
static数据成员的名字以Foo