Ant*_*nio 1 c++ templates function-pointers functor
函数关于函数的优点据说是它们保持状态.让我们说在我的问题中这不是一个相关的功能.
当我定义一个模板化的函数/类时,是否有任何规则可以选择将函数或函子作为模板参数更好?或者我可以基本上做同样的事情,所以这取决于我的口味?
(相关问题:Functor vs模板参数)
编辑:
我的问题部分回答(对于用户方)这里:使用这个无状态类与函数调用操作符vs ac样式函数的原因?
由于您正在定义模板函数,因此不要对您的用户进行选择(如果它不是模板,我会建议您为此将其设为模板).
请注意,界面有两面.您定义的函数可以选择签名,但不知道调用者(函数的用户)是否想要保持状态.如果选择了函数指针,则定义的函数会对用户施加要求,从而降低了灵活性.
请记住,C++是一种非常好的语言,它允许您在很多情况下提供很少或没有成本的抽象.例如,如果您选择使用通用方法,例如:
template <typename Iterator, typename Pred>
std::find_if( Iterator first, Iterator last, Pred p );
Run Code Online (Sandbox Code Playgroud)
这允许带有状态的仿函数,它仍然可以与普通函数一起使用而不会有任何松散的性能.通用方法不会比手动手工解决方案更糟糕.