2

函子相对于函数的优势据说是它们保持状态。假设在我的问题中这不是相关功能。

当我定义模板化函数/类时,是否有任何规则可以选择将函数或仿函数作为模板参数是否更好?或者我基本上可以做同样的事情,这取决于我的口味吗?

(相关问题:仿函数与模板参数

编辑:
我的问题在这里得到了部分回答(对于用户端):Reason to use this stateless class with a function call operator vs ac style function?

4

1 回答 1

6

由于您正在定义模板函数,因此不要将选择强加给您的用户(如果它不是模板,我建议您无论如何都将其设为模板)。

请注意,接口有两个侧面。您正在定义的函数可以选择签名,但它不知道调用者(函数的用户)是否想要保持状态。如果您选择了函数指针,那么所定义的函数将对用户提出要求,从而降低了灵活性。

请记住,C++ 是一种非常好的语言,因为它允许您在许多情况下以很少或没有成本提供抽象。例如,如果您选择使用通用方法,例如:

template <typename Iterator, typename Pred>
std::find_if( Iterator first, Iterator last, Pred p );

这允许具有状态的函子,它仍然可以与普通函数一起使用而不会降低性能。通用方法不会比手工制作的解决方案差。

于 2013-07-25T13:08:44.010 回答