提升图属性图的序列化

时间:2016-10-27 21:52:37

标签: c++ dictionary serialization boost graph

我正在尝试使用以下定义序列化boost :: graph:

 typedef boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS, boost::no_property,
                                  boost::property<boost::edge_weight_t, float> > mygraph_t;
    typedef boost::property_map<mygraph_t, boost::edge_weight_t>::type WeightMap;
    typedef mygraph_t::vertex_descriptor vertex;
    typedef mygraph_t::edge_descriptor edge_descriptor;


mygraph_t topoGraph;
WeightMap weightMap;

问题是由于我尝试序列化&#39; weightMap&#39;

引起的

即使我包含了我认为合适的头文件,但它仍然没有出现以下错误消息: &#34;升压/图形/ adj_list_serialize.hpp&#34;

/usr/include/boost/serialization/access.hpp:118:9: error: ‘struct boost::adj_list_edge_property_map<boost::undirected_tag, float, float&, long unsigned int, boost::property<boost::edge_weight_t, float>, boost::edge_weight_t>’ has no member named ‘serialize’
         t.serialize(ar, file_version);
         ^

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我无法重现它

这是一个有效的版本,在线

<强> Live On Coliru

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/adj_list_serialize.hpp>

typedef boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS, boost::no_property,
                                          boost::property<boost::edge_weight_t, float> > mygraph_t;
typedef boost::property_map<mygraph_t, boost::edge_weight_t>::type WeightMap;
typedef mygraph_t::vertex_descriptor vertex;
typedef mygraph_t::edge_descriptor edge_descriptor;

#include <boost/archive/text_oarchive.hpp>
#include <iostream>

int main() {
    mygraph_t topoGraph;
    WeightMap weightMap;

    boost::archive::text_oarchive oa(std::cout);
    oa << topoGraph;
}

希望它能帮助你发现差异。如果没有,您可能会遇到特定(旧版)Boost的问题。

答案 1 :(得分:0)

我认为您错过了以下文件:

#include <boost/graph/adj_list_serialize.hpp>

此头文件包含必要的序列化方法,用于以非介入方式加载/保存adjacency_list <...>对象。

答案 2 :(得分:-1)

为了序列化任何类的对象,该类必须提供serialize()模板函数。显然,类型adj_list_edge_property_map没有该功能。解决该问题的一种方法是创建一个存储该类型对象的包装类W,并添加W :: serialize(),它通过序列化weightMap的组件来实现。然后,不是序列化weightMap,而是序列化W。