【发布时间】:2012-12-06 12:04:40
【问题描述】:
可能重复:
Should templated functions take lambda arguments by value or by rvalue reference?
C++ 标准库函数按值接受函子(函数指针或函数对象)参数,如下所示:
template <typename F>
void apply(F func)
{
func();
}
...但是通过Universal Reference 传递函子不是更好吗?像这样:
template <typename F>
void apply(F&& func)
{
func();
}
这样您可以传递维护状态的函数对象,并在高阶函数返回后访问该(可能已修改)状态。
【问题讨论】:
-
模板在编译时展开/解析。他们如何知道编译时的状态?
-
请注意,对于第一个,您始终可以使用引用包装器来避免复制。
-
@Manoj R:我的意思是:你有一个函数对象变量 fn_obj,你调用 apply(fn_obj),然后你可以访问 fn_obj.state,它可能已经被调用修改了申请
标签: c++ c++11 functor argument-passing higher-order-functions