C ++ 0x mostra um exemplo de uso std::forward
:
template<class T>
void foo(T&& arg)
{
bar(std::forward<T>(arg));
}
Quando é vantajoso usar std::forward
sempre?
Além disso, ele requer o uso &&
na declaração de parâmetros, é válido em todos os casos? Eu pensei que você tinha que passar temporários para uma função se a função foi declarada com &&
ela, então pode ser chamado com qualquer parâmetro?
Por fim, se eu tiver uma chamada de função como esta:
template<int val, typename... Params>
void doSomething(Params... args) {
doSomethingElse<val, Params...>(args...);
}
Devo usar isso em seu lugar:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}
Além disso, se usar os parâmetros duas vezes na função, ou seja, encaminhar para duas funções ao mesmo tempo, é aconselhável usar std::forward
? Não std::forward
converterá a mesma coisa em temporária duas vezes, movendo a memória e a invalidará para um segundo uso? O código a seguir está ok:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
doSomethingWeird<val, Params...>(std::forward<Params>(args)...);
}
Estou um pouco confuso std::forward
, e eu ficaria feliz em esclarecer.
Args...&& args
?