#include <iostream> using namespace std; template<typename T> class testClass { public: static T _data; }; template<typename T> T testClass<T>::_data = 1; int main(int argc, char **argv) { cout << testClass<int>::_data << endl; cout << testClass<char>::_data << endl; testClass<int> obji1, obji2; testClass<char> objc1, objc2; cout << obji1._data << endl; cout << obji2._data << endl; cout << objc1._data << endl; cout << objc2._data << endl; obji1._data = 3; objc2._data = 4; cout << obji1._data << endl; cout << obji2._data << endl; cout << objc1._data << endl; cout << objc2._data << endl; testClass<unsigned int> objui; cout << objui._data << endl; objui._data=5; cout << objui._data << endl; return 0; }
可以看到每个T不同,程序都申请了一个静态变量。
单纯写了一个template class并没有任何用,只有使用到testClass<int>时,编译器才会帮助生成class testClass<int>(类似于帮忙写了这段代码),由编译器编译这段代码才会申请变量。
一开始写的时候以为是由template class申请静态变量空间的,还觉得static T _data类型必须指定。