C++ · Avançado · Inglês · Técnico
perfect forwarding
Técnica de repassar argumentos a outra função preservando exatamente sua categoria de valor (lvalue ou rvalue) e constness, usando forwarding reference e std::forward.
Onde usar
É o que permite que make_unique, emplace_back e wrappers genéricos construam objetos sem cópias extras. Em code review, aparece em funções fábrica template.
Em código
template <typename T, typename... Args>
std::unique_ptr<T> cria(Args&&... args) {
return std::unique_ptr<T>(
new T(std::forward<Args>(args)...));
}
auto p = cria<std::string>(3, 'x'); // "xxx"Exemplos
The factory uses perfect forwarding to hand the arguments to the constructor.
A fábrica usa perfect forwarding para repassar os argumentos ao construtor.
Without perfect forwarding every argument would be copied once more.
Sem perfect forwarding, cada argumento seria copiado mais uma vez.
Cuidado
Usar std::move no lugar de std::forward converte tudo em rvalue e pode roubar o que era lvalue do chamador.
Sinônimos
encaminhamento perfeito