Domanda

Stavo scrivendo una fabbrica oggetto generico e con la spinta preprocessore meta-biblioteca per fare un modello variadic (utilizzando 2010 e non li supporta). La mia funzione utilizza riferimenti rval e std::forward fare inoltro perfetto e mi ha fatto pensare ... quando C ++ 0X viene fuori e ho avuto un compilatore standard Vorrei farlo con i modelli variadic reali. Come, però, sarebbe che io chiamo std::forward sugli argomenti?

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

L'unico modo che posso pensare richiederebbe disimballaggio manuale di ... params e io non sono ancora lontani sia. C'è una sintassi più veloce che avrebbe funzionato?

È stato utile?

Soluzione

Si dovrebbe fare:

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

Il ... dice più o meno "prendere ciò che è a sinistra, e per ogni parametro del modello, scompattarlo di conseguenza."

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top