我目前正在尝试解决静态初始化命令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.
有人能解释什么是解决这种惨败的最佳方法吗?我做了一些阅读,但我仍然无法理解。任何建议或代码示例肯定会受到赞赏。
答案 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保证初始化。