[雷锋贴]Latest News:November 19, 2004 - boost Version 1.32.0 发布

hellwolf 2004-11-23 06:17:27
New Libraries
Assignment Library: Filling containers with constant or generated data has never been easier, from Thorsten Ottosen.
Minmax Library: Standard library extensions for simultaneous min/max and min/max element computations, from Hervé Brönnimann.
Multi-index Containers Library: Containers with multiple STL-compatible access interfaces, from Joaquín M López Muñoz.
Numeric Conversion Library: Optimized policy-based numeric conversions, from Fernando Cacciola.
Program Options Library: Access to configuration data given on command line, in config files and other sources, from Vladimir Prus.
Range Library: A new infrastructure for generic algorithms that builds on top of the new iterator concepts, from Thorsten Ottosen.
Serialization Library: Serialization/de-serialization of arbitrary C++ data structures to various formats including text, binary, and xml, from Robert Ramey.
String Algorithms Library: Collection of string related algorithms for case conversion, trimming, find/replace operations and more, from Pavol Droba.
Tribool: 3-state boolean type library, from Doug Gregor.

请到http://boost.sourceforge.net/看详细的文档
...全文
477 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellwolf 2005-01-03
  • 打赏
  • 举报
回复
Serialization
指南



--------------------------------------------------------------------------------

一个简单的例子
非侵入版本
可以序列化的成员
派生类
指针
数组
STL容器
类的版本化
将 serialize 用 save/load分开实现
档案

ar << data;
ar & data;一个输出档案和一个输出流非常像。数据用<<或者&操作符可以存入档案。


ar >> data;
ar & data;
一个输入档案和输出流也很相似。用>>和&操作符可以从档案中获得数据。
当这些操作符用于基本数据类型时,数据简单的存储进档案/从档案中载入。当用于类类型数据时,类的serialize函数就被调用。每个serialize 函数都通过上面的那些操作符来存储和载入类的数据成员。这是一个递归的过程,直到所有的所有的存储/载入工作都已经完成。

一个简单的例子
<<和&操作符在 serialize 函数内部用来存储和载入类的数据成员。

demo.cpp 演示了如何使用我们的系统。下面摘录的代码用最简单的例子演示这个库应该被如何使用。


#include <fstream>

// include headers that implement a archive in simple text format
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

/////////////////////////////////////////////////////////////
// gps coordinate
//
// illustrates serialization for a simple type
//
class gps_position
{
private:
friend class boost::serialization::access;
// When the class Archive corresponds to an output archive, the
// & operator is defined similar to <<. Likewise, when the class Archive
// is a type of input archive the & operator is defined similar to >>.
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & degrees;
ar & minutes;
ar & seconds;
}
int degrees;
int minutes;
float seconds;
public:
gps_position(){};
gps_position(int d, int m, float s) :
degrees(d), minutes(m), seconds(s)
{}
};

int main() {
// create and open a character archive for output
std::ofstream ofs("filename");
boost::archive::text_oarchive oa(ofs);

// create class instance
const gps_position g(35, 59, 24.567f);
// write class instance to archive
oa << g;
// close archive
ofs.close();

// ... some time later restore the class instance to its orginal state
// create and open an archive for input
std::ifstream ifs("filename", std::ios::binary);
boost::archive::text_iarchive ia(ifs);
// read class state from archive
gps_position newg;
ia >> newg;
// close archive
ifs.close();
return 0;
}


任何想通过序列化存储的类都必须有一个函数存储它的成员以表示这个类的状态。相应的,想从序列中获得数据的类必须定义一个函数,这个函数以和存储的次序相同的顺序获得数据。在上面的例子中,这个函数以一个成员模板函数 serialize的形式出现。

非侵入版本
……
……
……
请到:http://blog.csdn.net/hellwolf/archive/2005/01/03/238303.aspx看完整的翻译
oyljerry 2005-01-03
  • 打赏
  • 举报
回复
收下,学习
hellwolf 2005-01-02
  • 打赏
  • 举报
回复
序列化
Overview

--------------------------------------------------------------------------------

需求
其他实现方案
这里,我们用术语序列化(serialization)来表示将一组原始的C++数据结构表示为字节流达到可逆析构的目的。这样的系统可以用来在另一个程序环境中重新建立原来的数据结构。因此,它也可以作为对象持久性(object persistence),远程参数传递(remote parameter passing),或者其他特性的实现基础。在我们的系统中,将使用术语档案(archive)表示一个具体的字节流。档案可以是二进制文件,文本文件,XML文件,或者其他用户定义的类型。
我们的目标是:
代码的可移植性——只依靠ANSI C++的特性。
代码的经济性——挖掘各种C++的特性如RTTI、模板、和多继承等等使用户容易使用并且代码短小。
类版本的独立性。——当一个类的定义改变时,老版本的类的档案仍然可以被导入新版本的类中。
指针的深度存储和恢复。——保存或恢复指针的同时保存或恢复指针指向的数据。
正确的处理多个指针指向相同对象时的问题。
对STL和其他常用模板类的序列化的直接支持。
数据的可移植性——在一个平台上建立的字节流在另一个平台上也应该是正确的。
序列化和档案格式的正交性——可以在不改变类的序列化部分时应用任何格式的文件作为档案。
支持非侵入(Non-intrusive)式的实现。类不需要从某个特定的类派生或者实现特定的成员函数。这对于我们不能或不愿意修改类的定义的情况时是相当必要的。
档案的接口应该足够简单使建立新类型的档案的工作变得轻松。
档案应该支持XML格式。
其他实现方案
在开始这项工作之前,我找了一些目前的实现方案
MFC 是我非常熟悉的一个实现方案。我已经使用它数年了,而且发现它非常的有用。然而它不符合需求1,2,3,6,7,9。尽管如此,这人是我发现的最有用的实现。另外我发现类版本——MFC中部分的实现了这个特性——的支持在我的程序中是不可或缺的。比如,版本1.x的运输程序常常存储比以前提供的数据更多的信息。MFC是唯一支持版本功能的实现方案——尽管只能用于最晚辈派生类(most derived class)。但有总比没有好。另外MFC不支持STL容器的序列化,它只为MFC容器服务。
CommonC++ libraries [1] 这相当接近MFC的实现而且也解决了部分MFC的问题。它是可移植的,它建立可移植的档案但是不支持版本功能。它正确的处理了执政的存储,并且支持STL容器。它也解决了档案的压缩(虽然我不喜欢她的实现方式)。但这个库需要一个更好的文档。它不符合需求2,3,7,8,9。
Eternity [2] 这是一个“裸库”:-)。它的代码很漂亮但是它确实需要一份好的文档和更多的例子。没有充分的学习他的源代码的话你讲不知道如何去使用它。最新的版本支持XML格式。它不符合需求3,6,7?,8,9。
Holub's implementation [3] 它第一个让我认真思考我自己对序列化的需求的实现。你如果不是抱着自大和傲慢的态度的话,读它将是相当有趣和值得的。它不符合需求2,3,4,5,6。
s11n [13] 这个库的目标和我们相当接近。一些方面的实现也相当类似。在写这篇文章之时,它的一些问题是:
代码的可移植性(1)。 代码只在最近的GCC版本中可以使用。
类版本的独立性(3)。 类版本不被直接支持。
需求(5).它并没有自动的处理多指针问题。我还从文档中总结出来向图一样的数据结构也不支持。
它与我们的实现有许多不同也有许多相同的地方。
bill_li 2005-01-02
  • 打赏
  • 举报
回复
雷锋?
nwpulipeng 2005-01-02
  • 打赏
  • 举报
回复
接分了
roy 2005-01-02
  • 打赏
  • 举报
回复
雷锋
wzjasj 2004-12-03
  • 打赏
  • 举报
回复
是什么啊??????????
Wolf0403 2004-12-01
  • 打赏
  • 举报
回复
btw,还有鸡丁 ^_^
Wolf0403 2004-12-01
  • 打赏
  • 举报
回复
Multi-index Containers Library

刀子看见这个应该能想起点什么
willko 2004-12-01
  • 打赏
  • 举报
回复
avalonBBS 2004-12-01
  • 打赏
  • 举报
回复
学习雷锋好膀样。 :) 接分分
xboss 2004-12-01
  • 打赏
  • 举报
回复
E文不行啊!
但支持boost
picoolo1124 2004-11-30
  • 打赏
  • 举报
回复
赞雷锋
xunfengxxx 2004-11-30
  • 打赏
  • 举报
回复
Serializatio学习>>>
fancard 2004-11-30
  • 打赏
  • 举报
回复
看看。
Linux2001 2004-11-30
  • 打赏
  • 举报
回复
这个库太庞大太复杂了!好在使用起来还算顺手
Flood1984 2004-11-28
  • 打赏
  • 举报
回复
可惜看不懂E文
bugbugfly 2004-11-28
  • 打赏
  • 举报
回复
爱boost,所以爱C++.
nooffence 2004-11-28
  • 打赏
  • 举报
回复
又要学新东西了,我觉得这些类库的欣赏价值要大于实用价值,能从中学到好多东西!
支持一把 C++ 现在需要的应该不是更神奇的东西……
应该从实用角度出发来设计类库,别把使用者都吓跑了
过段时间要好好学习一下.
有不少喜欢的库
thread, signal, tuple, program options
现在这些对我很有用

jf
zj_c 2004-11-28
  • 打赏
  • 举报
回复
赞~~不愧是雷锋贴!~虽然看不懂~
加载更多回复(24)

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧