7

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

4

1 回答 1

5

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

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

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

于 2013-02-24T10:32:10.743 回答