簡體   English   中英

提升圖屬性圖的序列化

[英]boost serialization of graph property map

我試圖使用以下定義序列化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;

問題是由於我嘗試序列化'weightMap'引起的

即使我包含了我認為合適的頭文件:“boost / graph / adj_list_serialize.hpp”,它仍然沒有出現以下錯誤消息

/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);
         ^

非常感謝您的幫助。

我無法重現它

這是一個在線工作的版本

住在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版本的問題。

我想你錯過了包含以下文件:

#include <boost/graph/adj_list_serialize.hpp>

此頭文件包含必要的序列化方法,用於以非侵入模式加載/保存adjacency_list <...>對象。

為了序列化任何類的對象,該類必須提供serialize()模板函數。 顯然,類型adj_list_edge_property_map沒有該功能。 解決該問題的一種方法是創建一個存儲該類型對象的包裝類W,並添加W :: serialize(),它通過序列化weightMap的組件來實現。 然后序列化W而不是序列化weightMap。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM