65.9K
CodeProject 正在变化。 阅读更多。
Home

类中的静态初始化函数

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.71/5 (27投票s)

2007年4月8日

CPOL
viewsIcon

74662

downloadIcon

179

自动调用类的静态初始化函数。

Content

有时当我们编写 C++ 类时,我们希望使用一个静态函数来初始化类。例如,可以使用静态函数来初始化静态向量或映射。在 Java 中,我们可以通过 Java 的静态块轻松地做到这一点。那么在 C++ 中我们该如何做呢?

首先,让我们看看如何在 C++ 中初始化一个普通的静态成员。

class Test1 {
public:
    static string emptyString;
};

string Test1::emptyString = "";
// also can be
// string Test1::emptyString;
// string Test1::emptyString("");

如你所见,我们在类定义中声明一个静态成员变量,然后在实现文件中(.cpp)定义并初始化它。

现在我们遇到了第一个问题,如何初始化一个静态集合成员?答案是,我们必须编写一个静态函数来完成它。

现在我们遇到了第二个问题,如何调用初始化函数?通常,我们会在 main 函数中调用初始化函数。但我认为这不是一个好的解决方案,因为用户可能会忘记调用初始化函数。

这是我的解决方案

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;
    }
};

// Implement
vector<string> Test2::stringList;
bool Test2::__init = Test2::init();

在我的解决方案中使用了额外的静态成员。当额外的静态成员被初始化时,初始化函数会自动调用。

© . All rights reserved.