C++ 标准库函数按值接受函子(函数指针或函数对象)参数,如下所示:
template <typename F>
void apply(F func)
{
func();
}
...但是通过Universal Reference传递函子不是更好吗?像这样:
template <typename F>
void apply(F&& func)
{
func();
}
这样,您可以传递维护状态的函数对象,并在高阶函数返回后访问该(可能已修改)状态。
C++ 标准库函数按值接受函子(函数指针或函数对象)参数,如下所示:
template <typename F>
void apply(F func)
{
func();
}
...但是通过Universal Reference传递函子不是更好吗?像这样:
template <typename F>
void apply(F&& func)
{
func();
}
这样,您可以传递维护状态的函数对象,并在高阶函数返回后访问该(可能已修改)状态。
一些算法已经是这种情况;例如,在g++ 4.7.0
:
//stl_algo.h
template<typename _RandomAccessIterator, typename _UniformRandomNumberGenerator>
void
shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
_UniformRandomNumberGenerator&& __g)
{
...
}
显然,对于诸如随机数生成器之类的东西来说,这是必不可少的。然而,我想这会随着时间的推移变得更加普遍。