关于模板类中的静态成员变量和静态函数疑问?
1.一般类中的静态成员变量是属于类的,数据放在静态变量区,所有类实例共用该静态变量。但是模板类的静态变量就不一样,模板实例化一次就产生一个新的类,所以设想模板类中的静态变量应该是属于实例化类的,模板被实例化N次就会在静态变量区产生N个静态变量。
2.一般类的静态成员函数也是属于类的,函数入口地址提供给所有类实例对象共用,但是模板类呢?
写代码测试:
“test.h”如下:
#include "stdafx.h"
template<typename Type>
class CBase
{
public:
int static GetI();
public:
static int m_i;
};
“test.cpp”如下:
#include "stdafx.h"
#include "test.h"
template<class Type>
int CBase<Type>::m_i = 100;
template<class Type>
int CBase<Type>::GetI()
{
return m_i;
}
“main()”如下:
#include "stdafx.h"
#include "test.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
cout << &CBase<int>::m_i << endl;
cout << CBase<int>::GetI << endl;
cout << &CBase<double>::m_i << endl;
cout << CBase<double>::GetI << endl;
return 0;
}
但是存在链接错误,求指点:
[解决办法]
在vs2013 express中编译通过了。只是放在一起了而已。我用的
template<typename Type>
class CBase
{
public:
int static GetI();
public:
static int m_i;
};
template<class Type>
int CBase<Type>::m_i = 100;
template<class Type>
int CBase<Type>::GetI()
{
return m_i;
}
#include <iostream>
using namespace std;
int main()
{
cout << &CBase<int>::m_i << endl;
cout << CBase<int>::GetI << endl;
cout << &CBase<double>::m_i << endl;
cout << CBase<double>::GetI << endl;
return 0;
}