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++
时间: 2023-07-24 09:54:13 浏览: 55
对于这个类,可以使用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函数将其反序列化为对象,并输出其成员变量的值。