C++模板类中静态数据成员初始化

首先看代码,静态数据成员分为两种情况,第一种不依赖模版类型参数,第二种依赖模版类型参数。


 
  1. template < typename T> class TestTemStatic
  2. {
  3. public:
  4. static int knownTypeVar;
  5. static T unKnownTypeVar;
  6. };

那么如何初始化呢?


对于第一种存在两种初始化方式:


 
  1. template <> int TestTemStatic< int /* any other type */>::knownTypeVar= 2; //具化定义,给出T类型,同时定义num,T可以是其他任意特定类型。
  2. template < typename T> int TestTemStatic<T>::knownTypeVar= 50; //范化定义,定义num时不需要知道T的类型

如果你想给特定类型T的静态成员一个特定的值,使用第一种方式。如果你希望对任意类型T的都有一份通用的值,请使用第二种方式。

两种初始化可以并存,对于特定类型T如果存在具化定义,则以具化定义为准。并且对于特定类型T的具化定义不可在不同的(CPP)实现文件中重复。



 
  1. //a.cpp
  2. template < typename T> int TestTemStatic<T>::knownTypeVar= 50;
  3. //b.cpp
  4. template < typename T> int TestTemStatic<T>::knownTypeVar= 60;

范化定义可以在不同的(cpp)实现文件重复也可以赋予不同数值, 链接器负责选出唯一定义。选择哪一个与具体的编译顺序有关。

因此,范化定义可以放在头文件中,具化定义放在唯一的cpp文件中。


对于第二中只有一种初始化方式:

template <> float TestTemStatic<float>::unKnownTypeVar=4.0f;
 
由于unKnowTypeVar的定义依赖模版参数T的类型,所以定义unKnownTypeVar时必须给出T的类型。同样,对于特定类型T的具化定义不可在不同的(CPP)实现文件中重复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值