2013-02-24 65 views
7

我有一個名爲Graph的C++類,它有一個算法方法for_each_node()。我可以使它成爲一個模板,像這樣:算法函數:使其成爲模板還是採用std :: function參數?

template <class UnaryFunction> 
UnaryFunction Graph::for_each_node (UnaryFunction f) 
{ 
    /* ... */ 
} 

或使其使用std ::函數,就像這樣:

typedef std::function<void (Node&)> ForEachNodeFunc; 

ForEachNodeFunc Graph::for_each_node (ForEachNodeFunc f) 
{ 
    /* ... */ 
} 

的標準算法,例如std :: for_each,使用第一種方法,而一些庫,例如gtkmm(這是GTK +的C++綁定),將函數作爲包含它們的對象的函數指針。

每個選項的優點和缺點是什麼?我不確定要選擇哪個。什麼會影響選擇:我的Graph類是否是類模板,或者算法方法需要使用多少個不同的函數,還是速度要求?

回答

5

看看這個答案由Andy警車,我認爲這部分是你的問題的答案還有:

一般來說,如果你正面臨着一個設計情況,給你一個選擇,使用的模板。 ..

https://stackoverflow.com/a/14678298/1758762(STD ::功能VS模板)

+1

我看......然後的std ::功能的優勢正在被多態的包裝,並且不需要多態時,模板通常優於 – cfa45ca55111016ee9269f0a52e771 2013-02-24 10:39:31

相關問題