Wie immer gilt: Code zuerst:
#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
}
In C++ 98 gibt es keine schöne Möglichkeit, Vorwärtsparameter durch Template-Funktionen zu perfektionieren. Deshalb haben die C++-Gurus ref und cref erfunden, um dieses Ziel zu erreichen.
Bedeutet das, dass ref, cref und Co. jetzt, da wir r-Wert-Referenz und perfekte Weiterleitung haben, veraltet sein sollten?