Pergunta

Eu estava apenas escrevendo uma fábrica de objetos genéricos e usando a meta-biblioteca de pré-processador Boost para criar um modelo variádico (usando 2010 e não os suporta). Minha função usa referências rval e std::forward Para fazer o encaminhamento perfeito e me fez pensar ... quando o C ++ 0x sai e eu tinha um compilador padrão, eu faria isso com modelos variados reais. Como eu chamaria std::forward nos argumentos?

template <typename ...Params>
void f(Params... params) // how do I say these are rvalue reference?
{
    y(std::forward(...params)); //? - I doubt this would work.
}

A única maneira que eu consigo pensar exigiria a descompactação manual de ... parâmetros e ainda não estou lá. Existe uma sintaxe mais rápida que funcionaria?

Foi útil?

Solução

Você faria:

template <typename ...Params>
void f(Params&&... params)
{
    y(std::forward<Params>(params)...);
}

o ... Praticamente diz "Pegue o que está à esquerda e, para cada parâmetro de modelo, descompacte -o de acordo".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top