18
可能重复:
Should templated functions take lambda arguments by value or by rvalue reference?按值或通过C++ 11通用参考传递函数?
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,它可能已经被调用应用修改了 – TommiT