【问题标题】:Algorithm function: Make it a template or take a std::function parameter? [duplicate]算法函数:将其设为模板还是采用 std::function 参数? [复制]
【发布时间】: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


    【解决方案1】:

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

    一般来说,如果您面临的设计情况让您有选择的余地,请使用模板...

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

    【讨论】:

    • 我明白了……那么 std::function 的优势是作为一个多态包装器,当不需要多态时,模板通常更可取
    猜你喜欢
    • 2013-02-05
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2020-12-17
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多