gpt4 book ai didi

c++ - 算法函数:将其设为模板还是采用 std::function 参数?

转载 作者:可可西里 更新时间:2023-11-01 18:37:05 26 4
gpt4 key购买 nike

<分区>

我有一个名为 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++ 绑定(bind)),将函数作为包含它们的对象的函数指针。

每个选项的优点和缺点是什么?我不确定该选择哪个。什么应该影响选择:我的 Graph 类是否是类模板,或者算法方法期望使用多少不同的函数,或者速度要求?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com