19

可能重复:
模板化函数应该按值还是按右值引用采用 lambda 参数?

C++ 标准库函数按值接受函子(函数指针或函数对象)参数,如下所示:

template <typename F>
void apply(F func)
{
    func();
}

...但是通过Universal Reference传递函子不是更好吗?像这样:

template <typename F>
void apply(F&& func)
{
    func();
}

这样,您可以传递维护状态的函数对象,并在高阶函数返回后访问该(可能已修改)状态。

4

1 回答 1

8

一些算法已经是这种情况;例如,在g++ 4.7.0

//stl_algo.h

template<typename _RandomAccessIterator, typename _UniformRandomNumberGenerator>
void
shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
    _UniformRandomNumberGenerator&& __g)
{
    ...
}

显然,对于诸如随机数生成器之类的东西来说,这是必不可少的。然而,我想这会随着时间的推移变得更加普遍。

于 2012-12-19T07:25:33.340 回答