I have a boost graph with custom properties. I want to make a copy of it. I tried it by following way but got many compilation error.
Here is what I did :
using BGType = boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS,
// Vertex Properties...
vertexProps,
// Edge Propereties...
edgeProps,
// Graph Properties
graphProps>;
vertexProps.h
class vertexProps {
public:
explicit vertexProps(const std::string *moduleName = nullptr, const std::string *name = nullptr,
long refPtr = 0 )
: _refPtr(refPtr),
{
_moduleName = moduleName ? *moduleName : "";
_name = name ? *name : "";
};
struct CustomVertexCopy {
void operator()(const vertexProps& source_vertex, vertexProps& target_vertex) const {
target_vertex._refPtr = source_vertex._refPtr;
target_vertex._moduleName = source_vertex._moduleName;
target_vertex._name = source_vertex._name;
}
edgeProps.h
class edgeProps {
public:
explicit edgeProps(std::string name = "")
: _name(name){};
std::string _name;
};
struct CustomEdgeCopy {
void operator()(const edgeProps& source_edge, edgeProps& target_edge) const {
target_edge._name = source_edge._name;
}
};
someFunction.cpp
OnClick(BGType* bGraph)
{
// some code
BGType* oldBg = new BGType;
boost::copy_graph(bGraph, oldBg, boost::vertex_copy(CustomVertexCopy()));
boost::copy_graph(bGraph, oldBg, boost::edge_copy(CustomEdgeCopy()));
// some code
}
Where am I wrong ?
I have a one more doubt.
Will such deep copying impact on performance if grpah is big ? If yes, is there any way to avoid it ?
Aucun commentaire:
Enregistrer un commentaire