1. 程式人生 > >vector 靜態成員變數的初始化

vector 靜態成員變數的初始化

某些情況下,在寫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(),達到預期目的。