码迷,mamicode.com
首页 > 其他好文 > 详细

类模版静态成员初始化

时间:2014-08-07 15:47:30      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:c++   模版   静态成员   初始化   

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

template <typename T> class TestTemStatic
{
    public:
    static int knownTypeVar;
    static T unKnownTypeVar;
};

那么如何初始化呢?


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

template <> int TestTemStatic<int/* any other type */>::knownTypeVar=2;//具化定义,给出T类型,同时定义num,T可以是其他任意特定类型。


template <typename T> int TestTemStatic<T>::knownTypeVar=50;//范化定义,定义num时不需要知道T的类型



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

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


//a.cpp
template <typename T> int TestTemStatic<T>::knownTypeVar=50;

//b.cpp
template <typename T> int TestTemStatic<T>::knownTypeVar=60;


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

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


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

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


作者水平有限,平时不怎么接触模版,如果错误请指正。

类模版静态成员初始化,布布扣,bubuko.com

类模版静态成员初始化

标签:c++   模版   静态成员   初始化   

原文地址:http://blog.csdn.net/zjq2008wd/article/details/38417859

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!