C ++ 0x pokazuje przykład użycia std::forward:
template<class T>
void foo(T&& arg)
{
bar(std::forward<T>(arg));
}
Kiedy std::forwardzawsze warto używać ?
Ponadto wymaga użycia &&w deklaracji parametrów, czy jest ważny we wszystkich przypadkach? Myślałem, że musisz przekazać tymczasowe do funkcji, jeśli funkcja została &&w niej zadeklarowana , więc czy można wywołać foo z dowolnym parametrem?
Na koniec, jeśli mam wywołanie funkcji, takie jak to:
template<int val, typename... Params>
void doSomething(Params... args) {
doSomethingElse<val, Params...>(args...);
}
Powinienem zamiast tego użyć:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}
Ponadto, jeśli dwukrotnie użyjesz parametrów w funkcji, tj. Przekażesz do dwóch funkcji w tym samym czasie, czy rozsądnie jest to zrobić std::forward? Czy nie std::forwardprzekonwertujesz tego samego na tymczasowy dwukrotnie, przenosząc pamięć i uniemożliwiając jej ponowne użycie? Czy poniższy kod byłby w porządku:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
doSomethingWeird<val, Params...>(std::forward<Params>(args)...);
}
Jestem trochę zdezorientowany std::forwardi chętnie użyłbym jakiegoś wyjaśnienia.
Args...&& args?