考虑到存储作为容器的对象,你要把每一个类串行化。在串行化方法中,你可以读取和写入容器,就象你操作另外一个成员一样。你的容器可以是简单的语言本身内存的数组(如Vertex *vertices[10];),或者是来自于标准库的容器。因为现在是21世纪,我喜欢紧跟时代的步伐,所以我在本例中选择使用标准库。
尽管你可以在你的串行化类中编写代码,针对容器和每一个成员;然而,你不必这样做。作为代劳,库已十分聪明地自动遍历容器了。你所有要做是仅是写出容器,如下,其中vertices是一个容器:
ar & vertices;让库来做其余的工作吧。相信吗?下面是类Polygon的代码,串行化部分以粗体标出:
class Polygon {
private:
vector
vertices;
friend class boost::serialization::access;
template
void serialize(Archive & ar, const unsigned int version)
{
ar & vertices;
}
public:
void addVertex(Vertex *v) {
vertices.push_back(v);
}
void dump() {
for_each(vertices.begin(), vertices.end(), mem_fun(&Vertex::dump));
}
};
首先,请注意我用一个矢量来存储布点。(如果你对模板还是个新手,不要紧,只需要把vector
ar & vertices;
两个公共方法的建立,可以用来十分方便地操作该多边形。第一个addVertex方法,让你把另外一个结点添加到该多边形上;它使用了push_back方法,这是把一项加到一个矢量上去的标准方法。Dump函数遍历该矢量,把每一个矢量写到标准输出设备上去