Come sarebbe una chiamata std :: avanti su tutti gli argomenti in una funzione variadic?
-
26-09-2019 - |
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?
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."