c – 算法函数:使其成为模板或采用std :: function参数?

前端之家收集整理的这篇文章主要介绍了c – 算法函数:使其成为模板或采用std :: function参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > std::function vs template7个
我有一个名为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)

猜你在找的C&C++相关文章