C ++ 0x pokazuje przykład użycia std::forward
:
template<class T>
void foo(T&& arg)
{
bar(std::forward<T>(arg));
}
Kiedy std::forward
zawsze 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::forward
przekonwertujesz 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::forward
i chętnie użyłbym jakiegoś wyjaśnienia.
Args...&& args
?