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類是否是類模板,或者算法方法需要使用多少個不同的函數,還是速度要求?
我看......然後的std ::功能的優勢正在被多態的包裝,並且不需要多態時,模板通常優於 – cfa45ca55111016ee9269f0a52e771 2013-02-24 10:39:31