我有一个名为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类是一个类模板,还是期望与算法方法或速度要求一起使用多少个不同的函数?
答案 0 :(得分:5)
看看Andy Prowl给出的答案,我认为这也是你问题的部分答案:
一般情况下,如果您面临可以选择的设计情境,请使用模板......
https://stackoverflow.com/a/14678298/1758762(std :: function vs template)