c++11中unordered_地图作为类的静态成员,如何初始化

c++11中unordered_map作为类的静态成员,怎么初始化?
c++11中unordered_map作为类的静态成员,怎么初始化?
假如头文件A.h如下:
struct eq {
bool operator()(const TCHAR *s1, const TCHAR *s2) const {
return _tccmp(s1, s2) == 0;
}

bool operator()(uint a1, uint a2) const {
return a1 == a2;
}

bool operator()(int s1, int s2) const {
return s1 == s2;
}

bool operator()(const tstring &s1, const tstring &s2) const {
return s1 == s2;
}
};
class A  
{
private:
typedef unordered_map<const TCHAR *, A*, hash<const TCHAR *>, eq> hash_map_string_factory;
static hash_map_string_factory m_factory;
//...其它方法和构造函数略
static void Func(const TCHAR * i, A * factory)
{
    m_factory[i]=factory;//这里报异常了。。。。
}
};

A.cpp如下:
#include "A.h"
A::hash_map_string_factory A::m_factory;


------解决方案--------------------
vector subscript out of range,越界了!你仔细看下你的程序中,当你的参数穿进去的时候,是否有这个map
------解决方案--------------------
静态成员初始化顺序问题,调用Func的时候,这个静态变量还没有初始化,可以调整一下顺序,这里确实是个坑,c++11里已解决了,可以在声明处直接定义变量
------解决方案--------------------
引用:
这个如何初始化呢?
在A.cpp中,下面写
#include "A.h"
A::hash_map_string_factory A::m_factory={A::hash_map_string_factory()};

调用Func还是异常


你这样做是没用的,因为m_factory是静态变量,想当于全局变量,你调用的静态函数应该也是在全局变量的定义中调用的,这时m_factory还只有声明,没有定义。
所以要调整定义顺序, 在使用m_factory之前确保它已经定义过了。

工程大了,这种情况很难发现,所以少用全局变量和静态变量,全局变量和静态变量相当于打补丁和救急使用