forward
Warunkowo rzutuje swój argument do odwołania rvalue, jeśli argument to rvalue lub odwołanie rvalue.Spowoduje to przywrócenie cechy rvalue argumentu do funkcji przekazywania do przodu, aby obsłużyć doskonałe przekazywanie do przodu.
template<class Type> // accepts lvalues
Type&& forward(typename remove_reference<Type>::type& Arg)
template<class Type> // accepts everything else
Type&& forward(typename remove_reference<Type>::type&& Arg) noexcept
Parametry
Parametr |
Opis |
---|---|
Type |
Typ wartości przekazanej w Arg, który może być inny niż typ Arg.Zwykle określony przez argument szablonu funkcji przekazywania do przodu. |
Arg |
Argument do rzutowania. |
Wartość zwracana
Zwraca odwołanie rvalue do Arg, jeśli wartość przekazywana w Arg była pierwotnie rvalue lub odwołaniem rvalue; w przeciwnym razie zwraca Arg bez zmiany jego typu.
Uwagi
Musisz określić jawny argument szablonu, aby wywołać forward.
forward nie przekazuje swojego argumentu do przodu.Zamiast tego, przez warunkowe rzutowanie swojego argumentu na odwołanie rvalue, jeśli pierwotnie był on rvalue lub odwołaniem rvalue, forward umożliwia kompilatorowi wykonanie rozwiązania przeciążenia przy zachowaniu wiedzy o oryginalnym typie argumentu przekazanego do przodu.Jawny typ argumentu do funkcji przesyłania do przodu może być inny niż jego typ oryginalny — na przykład, kiedy rvalue jest używana jako argument do funkcji i jest powiązana z nazwą parametru; posiadanie nazwy sprawia, że jest to lvalue, niezależnie od tego, czy wartość faktycznie istnieje jako rvalue — forward przywraca cechę rvalue argumentu.
Przywracanie cechy rvalue oryginalnej wartości argumentu w celu wykonania rozwiązania przeciążenia jest znane jako doskonałe przekazywanie do przodu.Doskonałe przekazywanie do przodu umożliwia funkcji szablonu zaakceptowanie argumentu któregokolwiek typu odwołania i przywrócenie jego cechy rvalue, gdy jest to niezbędne do poprawnego rozwiązania przeciążenia.Za pomocą doskonałego przekazywania do przodu można zachować semantykę przenoszenia dla rvalue i uniknąć konieczności zapewnienia przeciążeń dla funkcji, które różnią się tylko pod względem typu odwołania ich argumentów.
Wymagania
Nagłówek: <utility>
Przestrzeń nazw: std