Tom*_*miT 18 c++ functor argument-passing higher-order-functions c++11
C++标准库函数按值获取functor(函数指针或函数对象)参数,如下所示:
template <typename F>
void apply(F func)
{
func();
}
Run Code Online (Sandbox Code Playgroud)
......但是通过Universal Reference传递仿函数会不会更好?像这样:
template <typename F>
void apply(F&& func)
{
func();
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以传递维护状态的函数对象,并在返回高阶函数后访问该(可能已修改的)状态.
一些算法就是这种情况; 例如,在g++ 4.7.0:
//stl_algo.h
template<typename _RandomAccessIterator, typename _UniformRandomNumberGenerator>
void
shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
_UniformRandomNumberGenerator&& __g)
{
...
}
Run Code Online (Sandbox Code Playgroud)
显然,对于诸如随机数生成器之类的事情来说,这是必不可少的.不过,我想这会成为更常见的事情.
| 归档时间: |
|
| 查看次数: |
1709 次 |
| 最近记录: |