c++ static std::map<String, String> m_LevelRank;初始化和使用
时间: 2024-05-23 13:09:26 浏览: 11
这段代码定义了一个名为m_LevelRank的静态std::map变量,它的键和值都是String类型。静态变量是指生命周期与程序的执行周期相同,无论你在程序中的哪个位置使用它,它都只会被初始化一次。而std::map是C++中的一个容器类,它是一个键-值对的集合,可以对其中的元素进行增删改查等操作。这里的初始化是以默认构造函数为模板进行初始化,即空的std::map容器。使用时可以通过引用或指针方式访问m_LevelRank,并对其中的元素进行操作,例如m_LevelRank["A"] = "1",表示在m_LevelRank中插入了一个键为"A",值为"1"的元素。
相关问题
如下代码使用stlport_static出错 std::map<std::string, int> myMap = { {"apple", 1}, {"banana", 2}, {"orange", 3} };
出错的原因可能是你的代码中使用了 `std::initializer_list`,而 `stlport_static` 不支持该特性。`std::initializer_list` 是 C++11 引入的语言特性,用于初始化容器和数组等对象。如果你使用的是较旧的 STL 实现,可能不支持这个特性。
解决方法有两种:
1. 升级 STL 实现。如果你使用的是较旧的 STL 实现,可以考虑升级到支持 `std::initializer_list` 的版本,比如 GNU STL 或者 libc++ 等。
2. 改变初始化方式。如果你无法升级 STL 实现,可以改变容器的初始化方式,例如:
```cpp
std::map<std::string, int> myMap;
myMap["apple"] = 1;
myMap["banana"] = 2;
myMap["orange"] = 3;
```
或者使用 `std::make_pair` 函数:
```cpp
std::map<std::string, int> myMap;
myMap.insert(std::make_pair("apple", 1));
myMap.insert(std::make_pair("banana", 2));
myMap.insert(std::make_pair("orange", 3));
```
class InformationUI { /*视角0第一视角1第三视角*/ int viewAngleEnum; /*球标图*/ int bubble; /*是否英制螺牙*/ int isEnglishSystem; /*是否添加研磨符号*/ int isLap; /*球标图大小*/ double bubbleSize; /*图纸路径*/ std::string drawSheetPath; /*客户标准*/ std::string customer; /*投影视图0主视图1右视图2前视图3左视图4后视图5正三轴*/ int view[6]; /*公共属性and属性值*/ std::map<std::string, std::string> commonAttrAndVal; /*被选中零件标记*/ std::string selLable; /*临时部件*/ static std::string tempPartName; }; 如何将这个类进行序列化和反序列化c++
对于这个类,可以使用C++标准库中的序列化工具来进行序列化和反序列化。下面是一个示例代码:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <map>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
class InformationUI {
public:
/*视角0第一视角1第三视角*/
int viewAngleEnum;
/*球标图*/
int bubble;
/*是否英制螺牙*/
int isEnglishSystem;
/*是否添加研磨符号*/
int isLap;
/*球标图大小*/
double bubbleSize;
/*图纸路径*/
std::string drawSheetPath;
/*客户标准*/
std::string customer;
/*投影视图0主视图1右视图2前视图3左视图4后视图5正三轴*/
int view[6];
/*公共属性and属性值*/
std::map<std::string, std::string> commonAttrAndVal;
/*被选中零件标记*/
std::string selLable;
/*临时部件*/
static std::string tempPartName;
// 序列化函数
friend class boost::serialization::access;
template <class Archive>
void serialize(Archive& ar, const unsigned int version) {
ar & viewAngleEnum;
ar & bubble;
ar & isEnglishSystem;
ar & isLap;
ar & bubbleSize;
ar & drawSheetPath;
ar & customer;
ar & view;
ar & commonAttrAndVal;
ar & selLable;
ar & tempPartName;
}
};
std::string serialize(const InformationUI& infoUI) {
std::ostringstream os;
boost::archive::text_oarchive oa(os);
oa << infoUI;
return os.str();
}
InformationUI deserialize(const std::string& str) {
std::istringstream is(str);
boost::archive::text_iarchive ia(is);
InformationUI infoUI;
ia >> infoUI;
return infoUI;
}
int main() {
InformationUI infoUI;
infoUI.viewAngleEnum = 1;
infoUI.bubble = 2;
infoUI.isEnglishSystem = 0;
infoUI.isLap = 1;
infoUI.bubbleSize = 3.14;
infoUI.drawSheetPath = "/path/to/drawsheet";
infoUI.customer = "customer1";
infoUI.view[0] = 0;
infoUI.view[1] = 1;
infoUI.view[2] = 2;
infoUI.view[3] = 3;
infoUI.view[4] = 4;
infoUI.view[5] = 5;
infoUI.commonAttrAndVal["attr1"] = "val1";
infoUI.commonAttrAndVal["attr2"] = "val2";
infoUI.selLable = "selected";
InformationUI::tempPartName = "tempPart";
std::string serialized = serialize(infoUI);
std::cout << "Serialized: " << serialized << std::endl;
InformationUI deserialized = deserialize(serialized);
std::cout << "Deserialized:" << std::endl;
std::cout << "viewAngleEnum: " << deserialized.viewAngleEnum << std::endl;
std::cout << "bubble: " << deserialized.bubble << std::endl;
std::cout << "isEnglishSystem: " << deserialized.isEnglishSystem << std::endl;
std::cout << "isLap: " << deserialized.isLap << std::endl;
std::cout << "bubbleSize: " << deserialized.bubbleSize << std::endl;
std::cout << "drawSheetPath: " << deserialized.drawSheetPath << std::endl;
std::cout << "customer: " << deserialized.customer << std::endl;
std::cout << "view: ";
for (int i = 0; i < 6; ++i) {
std::cout << deserialized.view[i] << " ";
}
std::cout << std::endl;
std::cout << "commonAttrAndVal: ";
for (const auto& it : deserialized.commonAttrAndVal) {
std::cout << it.first << "=" << it.second << " ";
}
std::cout << std::endl;
std::cout << "selLable: " << deserialized.selLable << std::endl;
std::cout << "tempPartName: " << InformationUI::tempPartName << std::endl;
return 0;
}
这里使用了boost库中的archive来进行序列化和反序列化。在序列化函数中,首先将对象os进行输出流处理,然后再将其序列化为字符串返回。在反序列化函数中,将输入流is绑定到输入字符串str上,然后将其反序列化为对象返回。在main函数中,我们创建了一个InformationUI对象,并对其成员变量进行初始化。然后使用serialize函数将其序列化为字符串,再使用deserialize函数将其反序列化为对象,并输出其成员变量的值。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)