【发布时间】:2013-02-09 15:26:04
【问题描述】:
我有一个名为 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 类是否是类模板,或者算法方法需要使用多少不同的函数,或者速度要求?
【问题讨论】:
标签: c++ c++11 signals-slots stl-algorithm std-function