我有一个类,它包含一个静态成员,一个字符串映射到函数指针。该映射旨在用一组静态映射填充一次,并且不会随后进行修改。强制静态成员初始化
我的问题是,如何确保地图在初始化之前不被访问?我的代码目前看起来是这样的:
class MyClass
{
static MapType s_myMap;
public:
static const MapType& getTheMap()
{
if (s_myMap.empty())
{
// Populate the map
}
return s_myMap;
}
};
,工作正常进行的MyClass
外部客户,但并不妨碍内部类成员直接访问private
地图已经初始化之前。
为了解决这个问题,我想制作地图本地的getter方法的:
class MyClass
{
public:
static const MapType& getTheMap()
{
static MapType s_myMap;
if (s_myMap.empty())
{
// Populate the map
}
return s_myMap;
}
};
这是一个好主意,或者是有实现这一目标的一个更好的办法?
将静态移动到函数是一个好主意。只要没有其他的静态对象初始化调用'getTheMap',你就没事。 –
地图是否动态初始化?如果没有,你可以将它填充到初始化程序中(假设你有最近的编译器)。 –
@KerrekSB它是静态初始化的。为了检查我已经理解了你,你是否建议将'//填充地图'所隐含的代码移动到一个单独的初始化方法(例如'initialiseMap()'),然后通过'MapType MyClass :: s_myMap = initialiseMap()'? – atkins