在写C++时,博主遇到对类中静态的map进行初始化的问题,在不断尝试中找到了一种解决方案。
如下所示:
我们可以在类中写一个私有的静态成员函数用于对map初始化。
CGuitarSpec.h
class GuitarSpec//吉他的部分属性
{
public:
string GetColor();
int SetColor(Color);
string GetType();
int SetType(Type);
bool operator==(const GuitarSpec &TempGuitarSpec);
private:
Type type;
Color color;
static map<int, string> Mtype;
static map<int, string> Mcolor;
static map<int, string> CreateMtype()
{
map<int, string> TempMtype;
TempMtype.insert(pair<int, string>(popular,"popular"));
TempMtype.insert(pair<int, string>(classical,"classical"));
return TempMtype;
}
static map<int, string> CreateMcolor()
{
map<int, string> TempMColor;
TempMColor.insert(pair<int, string>(red,"red"));
TempMColor.insert(pair<int, string>(yellow,"yellow"));
TempMColor.insert(pair<int, string>(blue,"blue"));
TempMColor.insert(pair<int, string>(green,"green"));
return TempMColor;
}
};
GuitarSpec.cpp
#include "CGuitarSpec.h"
map<int, string> GuitarSpec::Mtype = GuitarSpec::CreateMtype();//静态数据成员初始化
map<int, string> GuitarSpec::Mcolor = GuitarSpec::CreateMcolor();//静态数据成员初始化
如此便实现了对C++类中对静态map的初始化。
博主在这里将私有静态函数的实现放在了头文件中,建议大家将其实现放在.cpp中。