我在boost中初始化filtered_graph时有一个查询。
这是我的代码,
// predicate
template <typename TGraph>
struct edge_predicate
{
bool operator()(const typename boost::graph_traits<TGraph>::edge_descriptor& v) const
{
return true //testing purpose
}
};
// class
class A{
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, Node_Info, Edge_Info > Graph_t;
typedef boost::filtered_graph < Graph_t , edge_predicate > FilteredGraphType_t;
// members
Graph G;
FilteredGraphType_t FG() ; // empty filter graph ???
// constructor for A
template < ..typename list >
A ( ... input iterators list... )
{
fill the graph G with some values passed in constructor argument list.
// predicate
edge_predicate< Graph_t > EPred;
//filtered_graph
FilteredGraphType_t FG( G, EPred); // I am passing on edge predicate.
}
};
// member function:
FilteredGraphType_t& get_filtered_graph()
{
return FG;
}
问题:
FG是A类的成员,G也是A的成员。最初G是空对象,我猜是FG,...
在A的构造函数中,我用我的逻辑填充图G(例如顶点数,边数等)。 现在,我想在图G上创建一个过滤器FG (它是A类的成员)(在G填充之后)。
我想要的原因是这个过滤后的图形作为对其他类构造函数的引用传递。这迫使我将FG作为A类的成员。(我可以在A本身的构造函数中创建过滤器图的新实例,但它不会用于返回对FG的引用。)
我希望很清楚。请建议
答案 0 :(得分:0)
您可以使代码编译并正常工作。尝试重新组织构造函数,如下所示:
// constructor for A
template < ..typename list >
A ( ... input iterators list... )
: G() //calls constructor for G
, EPred(...) //some constructor for predicate
, FG( boost::make_filtered_graph(G, EPred) ) //creates your filtered graph
{
// fill the graph G with some values passed in constructor argument list.
}
其余代码可以保持不变。