2015-11-19 84 views
1

這個問題是關於Boost Graph LibraryBGL:沒有默認構造函數的捆綁對象?

假設我的圖表類型是這樣定義的:

using Graph = boost::adjacency_list<vecS, setS, directedS, State>; 

現在,如果我理解正確的話,我可以在新的State對象s添加到圖表所示:

auto vd = add_vertex(g); // g is a Graph object 
g[vd] = s; 

有是這樣的兩個問題:

  • 它需要State有一個默認的構造函數。在這個特定的類State的情況下,默認構造函數根本沒有意義。

  • 這樣,我添加頂點時支付State對象的默認構造。這個成本是純粹的運行時間開銷。

那麼,有沒有辦法避免捆綁對象的默認構造函數的需要?

回答

1

documentation

類型的所有屬性值必須是可複製構造,可賦值和可缺省構造。從adjacency_list類獲得的屬性映射是左值屬性映射概念的模型。如果adjacency_list是const,那麼屬性映射是常量,否則屬性映射是可變的。

你應該做一個屬性類型,它是能夠持有或引用State

對於你可能有,是以財產超載成功的第一步:

auto vd = add_vertex(s, g); // g is a MutablePropertyGraph object 
g[vd] = s; 

見其他docs

+0

你還需要'G [VD = s'?另外,我的'Graph'類型適合用於這種過載嗎? – AlwaysLearning

+0

您可以在鏈接的文檔中查找。但是,是的,這應該適用。不過,對於房產類型的要求並沒有改變,所以應該考慮系統性的修改。 – sehe

相關問題