类成员变量数组初始化方法解析

  • Post author:
  • Post category:其他


某些情况下,在写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)

{


}

…….