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

时间:2013-02-24 10:28:14

标签: c++ c++11 signals-slots stl-algorithm std-function

我有一个名为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类是一个类模板,还是期望与算法方法或速度要求一起使用多少个不同的函数?

1 个答案:

答案 0 :(得分:5)

看看Andy Prowl给出的答案,我认为这也是你问题的部分答案:

一般情况下,如果您面临可以选择的设计情境,请使用模板......

https://stackoverflow.com/a/14678298/1758762(std :: function vs template)