参见英文答案 >
std::function vs template7个
我有一个名为Graph的C类,它有一个算法方法for_each_node().我可以把它变成一个模板,像这样:
我有一个名为Graph的C类,它有一个算法方法for_each_node().我可以把它变成一个模板,像这样:
template <class UnaryFunction> UnaryFunction Graph::for_each_node (UnaryFunction f) { /* ... */ }
或者使用std :: function,如下所示:
typedef std::function<void (Node&)> ForEachNodeFunc; ForEachNodeFunc Graph::for_each_node (ForEachNodeFunc f) { /* ... */ }
标准算法,例如std :: for_each,使用第一种方法,而某些库,例如gtkmm(这是GTK的C绑定),将函数作为包含它们的对象的函数指针.
每种选择的优点和缺点是什么?我不知道该选哪个.应该影响选择的是什么:我的Graph类是一个类模板,或者算法方法或速度要求预计会使用多少个不同的函数?
解决方法
看看Andy Prowl的这个答案,我认为这也是你问题的部分答案:
一般来说,如果您面临的设计情况可以让您做出选择,请使用模板……
https://stackoverflow.com/a/14678298/1758762(std :: function vs template)