静态映射初始化
Static map initialization
我有以下代码:
//MyClass.h
class MyClass {
public:
typedef std::map<std::string, int> OpMap;
static OpMap opMap_;
// (more methods)
};
//MyClass.cpp
//Init opMap_
MyClass::opMap_["x"] = 1; //compilation error
如何(静态)初始化opMap_
?
如果您使用的是 C++11,则可以使用初始值设定项列表:
//MyClass.h
class MyClass {
public:
typedef std::map<std::string, int> OpMap;
static OpMap opMap_;
};
//MyClass.cpp
MyClass::OpMap MyClass::opMap_ = {
{ "x", 1 }
};
如果您无权访问支持 C++11 标准的编译器,则可以执行以下操作:
//MyClass.h
class MyClass {
public:
typedef std::map<std::string, int> OpMap;
static OpMap opMap_;
private:
static OpMap init_map() {
OpMap some_map;
some_map["x"] = 1;
return some_map;
}
};
//MyClass.cpp
MyClass::OpMap MyClass::opMap_ = init_map();
使用 VS2010 时,需要在 MyClass.cpp 中初始化静态成员,在任何其他成员函数定义之前。 如果要初始化opMap_
,请调用MyClass::InitMap()
。
MyClass.h
class MyClass
{
public:
MyClass(void);
~MyClass(void);
public:
typedef std::map<std::string, int> OpMap;
static OpMap opMap_;
static void InitMap();
};
我的班级.cpp
std::map<std::string, int> MyClass::opMap_;
MyClass::MyClass(void)
{
InitMap(); // just sample if you want to initialize opMap_ inside MyClass constructor
}
void InitMap()
{
MyClass::opMap_["x"] = 1;
}
在 C++ 17 中,您可以添加内联
//MyClass.h
class MyClass {
public:
typedef std::map<std::string, int> OpMap;
inline static OpMap opMap_;
// (more methods)
};
相关文章:
- 内联映射初始化的动态atexit析构函数崩溃
- 在未初始化映射的情况下,将值插入到映射的映射中
- 在C++中初始化向量映射的最有效方法
- 初始化之前使用的静态映射
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 由于没有使用赋值运算符,映射的值是如何初始化的?
- 单行初始化映射中的C++对象
- 使用更大的比较器初始化映射
- 初始化映射的值,该映射是结构内的字段
- 在类构造函数中初始化映射时,如何避免内存泄漏
- 如何使用RCPP初始化映射的映射
- 初始化映射时出错
- 为什么初始化映射时不能省略大括号
- 如何在结构数据结构中使用 map stl 并初始化映射,然后引用它
- 使用结构内的自定义类初始化映射
- 用一对std::arrays c++11初始化映射
- c++可以更好地初始化映射映射
- 如何从set初始化映射
- 初始化C++映射时出错
- 在 EIGEN 中单独声明和初始化映射类型矩阵