某些情况下,在写C++类的时候,希望能通过一个
静态
初始化
函数来对类的一些
静态
成员进行
初始化
。比如,往
静态
的std::map成员或者std::
vector
成员里添加一些固定的内容等。这在Java里通过static块很容易实现。但在C++里该怎么办呢?
如果要
初始化
一个普通的
静态
成员,只需要在实现文件(源文件)中定义该成员并赋予初始值即可,比如:
class
Test1 {
public
:
static
string
emptyString;
};
string
Test1::emptyString
=
“”
;
//
also can be
//
string Test1::emptyString;
//
string Test1::emptyString(“”);
静态
函数是不能像这样直接调用的。但是,不妨利用一下C++
初始化
普通成员的特点来调用
静态
初始化
函数。当然,这需要定义一个额外的
静态
成员变量来辅助一下。如:
class
Test2 {
public
:
static
vector
<
string
>
stringList;
private
:
static
bool
__init;
static
bool
init() {
stringList.push_back(
”
string1
”
);
stringList.push_back(
”
string2
”
);
stringList.push_back(
”
string3
”
);
return
true
;
}
};
vector
<
string
>
Test2::stringList;
bool
Test2::__init
=
Test2::init();
上面这个示例中初始化成
静态
成员__init的时候就“顺便”调用了
静态
初始化
函数init(),达到预期目的。
项目例子:
#include “StdAfx.h”
#include “CTrackView.h”
#include “DataBaseInfo.h”
CVSS_Rect CTrackView::m_WorldRt(0,0,0,0);
CRect CTrackView::m_ScreenRt(0,0,0,0);
HDC CTrackView::m_HDC = NULL;
v_VnoPoint CTrackView::v_VnoPt;
CTrackView::CTrackView(void)
{
}
CTrackView::~CTrackView(void)
{
}
…….