Visual C++ 7.1Visual C++ 8.0Windows VistaVisual C++ 7.0Visual Studio .NET 2003Windows 2003Visual Studio 2005Windows 2000Visual C++ 6.0Windows XP中级开发Visual StudioWindowsC++
类中的静态初始化函数






2.71/5 (27投票s)
自动调用类的静态初始化函数。
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();
在我的解决方案中使用了额外的静态成员。当额外的静态成员被初始化时,初始化函数会自动调用。