文章目录
1.序列化函数库
- 1.序列化函数库
- 2.DrawObject.h文件
- 3.DrawObject.cpp文件
- 4.子类.h文件
- 5.子类.cpp文件
- 6.读者答疑
在C++编程中,一个常用的操作是保存数据到文件,用于下次加载时使用,为达到这一目的,boost库提供了序列化的库供使用,源代码如下所示:
#include "boost/serialization/serialization.hpp"
#include "boost/archive/binary_oarchive.hpp"
#include "boost/archive/binary_iarchive.hpp"
#include "boost/foreach.hpp"
#include "boost/any.hpp"
#include "boost/serialization/vector.hpp"
#include "boost/serialization/list.hpp"
#include "boost/serialization/deque.hpp"
#include "boost/serialization/string.hpp"
#include "boost/serialization/split_free.hpp"
#include "boost/serialization/base_object.hpp"
#include "boost/serialization/access.hpp"
#include "boost/serialization/version.hpp"
#include "boost/serialization/export.hpp"
#include "boost/archive/text_iarchive.hpp"
#include "boost/archive/text_oarchive.hpp"
class class1
{
//序列数据
friend class boost::serialization::access;
template//序列化函数
void serialize(Archive& ar,const unsigned int version)
{
ar&m_filename;
if(Archive::is_loading::value)//加载数据
{
ar&m_ANormalLabelSizeMap;
std::map::iterator it=m_ANormalLabelSizeMap.begin();
for (;it!=m_ANormalLabelSizeMap.end();it++)
{
//创建对象加载数据
ANormalLabelSize* pANormalLabelSize=new ANormalLabelSize;
ar&(pANormalLabelSize);
it->second = pANormalLabelSize;
}
}
if(Archive::is_saving::value)
{
ar&m_ANormalLabelSizeMap;
std::map::iterator it=m_ANormalLabelSizeMap.begin();
for (;it!=m_ANormalLabelSizeMap.end();it++)
{
ar&(*(it->second));//保存对象数据
}
}
}
}
父类和子类序列化,源代码如下所示:
2.DrawObject.h文件// ODShape.h: interface for the CShape class.
//
//
#if !defined(AFX_ODShape_H__125A1B30_9A77_4C4D_9B48_894687D03BEC__INCLUDED_)
#define AFX_ODShape_H__125A1B30_9A77_4C4D_9B48_894687D03BEC__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "gdiplus.h"
#include
#include "GeometryCompute.h"
#include
#include "GDIPlusSerialization.h"
//对象类型
enum DrawObjectType
{
ObjectType_UnKnow,
ObjectType_Pointer,
ObjectType_Rectangle,
ObjectType_Line,
ObjectType_PolyLine,
ObjectType_Polygon,
ObjectType_Rotation,
ObjectType_Text,
ObjectType_Image,
ObjectType_PolygonCrop,
NumberOfDrawObjectTypes
} ;
class DrawObject
{
public:
DrawObject ();
virtual ~DrawObject ();
public:
//对象名称
std::string m_DrawObjectName;//对象ID
//画笔
Gdiplus::Color m_PenColor;
float m_PenWidth;
int m_PenType;
//画刷
Gdiplus::Color m_FillColor;
bool m_Filled;
int m_BrushType;
//状态属性
Gdiplus::PointF m_Center;
std::string m_TipText;
unsigned MID;
bool m_Dirty;
int m_Id;
int m_ZOrder;
float m_Rotation;
bool m_bIsDrawCenterPoint;
int m_ConnectionCount;
bool m_Selected;
bool m_bIsImage;
int m_HandleCount;
//微调
float m_Step;
bool m_IsCreated;
//对象类型名
DrawObjectType m_ObjectType;
//绘制模式 0代表正常绘图 1代表只绘制关键点
int m_DrawMode;
public:
//序列数据
friend class boost::serialization::access;
template//序列化函数
void serialize(Archive& ar,const unsigned int version)
{
//对象名称
ar&BOOST_SERIALIZATION_NVP(m_DrawObjectName);
//画笔
ar&BOOST_SERIALIZATION_NVP(m_PenColor);
ar&BOOST_SERIALIZATION_NVP(m_PenWidth);
ar&BOOST_SERIALIZATION_NVP(m_PenType);
//画刷
ar&BOOST_SERIALIZATION_NVP(m_FillColor);
ar&BOOST_SERIALIZATION_NVP(m_Filled);
ar&BOOST_SERIALIZATION_NVP(m_BrushType);
//状态属性
ar&BOOST_SERIALIZATION_NVP(m_Center);
//ar&m_Center;
ar&BOOST_SERIALIZATION_NVP(m_TipText);
ar&BOOST_SERIALIZATION_NVP(MID);
ar&BOOST_SERIALIZATION_NVP(m_Dirty);
ar&BOOST_SERIALIZATION_NVP(m_Id);
ar&BOOST_SERIALIZATION_NVP(m_ZOrder);
ar&BOOST_SERIALIZATION_NVP(m_Rotation);
ar&BOOST_SERIALIZATION_NVP(m_bIsDrawCenterPoint);
ar&BOOST_SERIALIZATION_NVP(m_ConnectionCount);
ar&BOOST_SERIALIZATION_NVP(m_Selected);
ar&BOOST_SERIALIZATION_NVP(m_bIsImage);
ar&BOOST_SERIALIZATION_NVP(m_HandleCount);
//微调
ar&BOOST_SERIALIZATION_NVP(m_Step);
ar&BOOST_SERIALIZATION_NVP(m_IsCreated);
}
};
BOOST_SERIALIZATION_ASSUME_ABSTRACT(DrawObject);
typedef std::list ShapeList;
typedef ShapeList::iterator ShpIt;
typedef ShapeList::const_iterator ConShpIt;
#endif // !defined(AFX_ODShape_H__125A1B30_9A77_4C4D_9B48_894687D03BEC__INCLUDED_)
3.DrawObject.cpp文件
// ODShape.cpp: implementation of the CShape class.
//
//
#include "stdafx.h"
#include "DrawObject.h"
#include
#include "CADControl.h"
#include "GeometryCompute.h"
#include
#include
#include
#include
#include
#include
#include
#include "MyLogger.h"
using namespace Gdiplus;
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define ABGR(a,r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?