读书人

细化类模板中定义静态成员算不算使用该

发布时间: 2013-07-04 11:45:33 作者: rapoo

具体化类模板中定义静态成员算不算使用该模板?
template<> class A<int>
{
public:
static int x;
};
int A<int>::x=1; //这里使用了A<int>,算不算使用了类模板生成一个类?

[解决办法]
其实这里不管它是不是把模版实例化对你来说都没影响。因为如果只有这一个语句是影响不到其他内容的,相反如果有其他的A<int>必然会受这句影响。

像VC++里对模版类的处理每个成员都是独立的,没有真正意义上的摸板类实例化。写A<int>::x只会实例化A<int>::x。
[解决办法]
其实你何必去关注这些细节呢, 不管它生成没有, 反正我不用它, 就可以当它不存在.

不过既然你追究了, 它确实是生成了的. 和你的 int A<int>::x=1; 定义没有关系, 一个模板类全特化时就生成类的定义了. 这个你可以通过 VC 编译器的 /d1reportAllClassLayout 选项查看类的布局来进行验证. 你的代码即使去掉 int A<int>::x=1; 一样会产生如下的类:

class ?$A@Hsize(1):
+---
+---

读书人网 >C++

热点推荐