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