解决静态初始化命令fiasco

时间:2013-05-12 03:12:17

标签: c++

我目前正在尝试解决静态初始化命令fiasco。这是参考我之前的帖子link。我有一个静态方法来填充静态容器的属性。现在,我的项目中的一个类有一个静态属性,可以从该静态方法中检索一个值。问题是在启动静态方法之前调用类的静态属性。我的问题是如何解决这个问题。 代码示例如下所示

//This is the code that has the static map container which is not initialized when 
//its queried by the OtherClass::mystring
Header File
class MyClass
{
    static std::map<std::string,std::string> config_map;
    static void SomeMethod();
};

Cpp File
std::map<std::string,std::string> MyClass::config_map ;

void MyClass::SomeMethod()
{
...
config_map.insert(std::pair<std::string,std::string>("dssd","Sdd")); //ERROR
}

现在通过以下移植来调用某个方法

 Header File
    class OtherClass
    {
        static string mystring;
    };

    Cpp File
    std::string OtherClass::mystring = MyClass::config_map["something"]; // However config_map has not been initialized.

有人能解释什么是解决这种惨败的最佳方法吗?我做了一些阅读,但我仍然无法理解。任何建议或代码示例肯定会受到赞赏。

1 个答案:

答案 0 :(得分:1)

声明一个函数并将config_map声明为其中的静态

class MyClass {
...
  static std::map<std::string,std::string> & config_map() {
    static std::map<std::string,std::string> map;
    return map;
  }
};

void MyClass::SomeMethod()
{
...
config_map().insert(std::pair<std::string,std::string>("dssd","Sdd"));
}

std::string OtherClass::mystring = MyClass::config_map()["something"];

现在map保证初始化。