像往常一樣,代碼首先:在C++ 0x中完美轉發是否使reference_wrapper不被使用?
#include <functional>
using namespace std;
using namespace std::tr1;
void f(int& r) { r++; }
template<class F, class P> void g1(F f, P t) { f(t); }
template<class F, class P> void g2(F f, P&& t) { f(forward<P>(t)); }
int main()
{
int i = 0;
g1(f, ref(i)); // old way, ugly way
g2(f, i); // new way, elegant way
}
在C++ 98中,我們沒有一個很好的辦法pefect向前模板函數的參數。所以C++大師們發明了ref和cref來實現這個目標。
現在我們已經有了r值引用和完美的轉發,這是否意味着ref和cref之類的應該被棄用?