Skip to content

静态初始化类成员 #12

Open
Open
@jamesfancy

Description

@jamesfancy

某些情况下,在写 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(),达到预期目的。

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions