Pertanyaan Bagaimana seseorang memanggil std :: forward pada semua argumen dalam fungsi variadic?


Saya baru saja menulis sebuah pabrik objek generik dan menggunakan meta-library preprocessor dorongan untuk membuat template variadic (menggunakan 2010 dan itu tidak mendukung mereka). Fungsi saya menggunakan rujukan rujukan dan std::forward untuk melakukan forwarding sempurna dan itu membuat saya berpikir ... ketika C ++ 0X keluar dan saya memiliki compiler standar saya akan melakukan ini dengan template variadic nyata. Bagaimana saya akan menelepon std::forward pada argumen?

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

Satu-satunya cara yang bisa kupikirkan akan membutuhkan pembongkaran manual ... params dan aku belum cukup sampai di sana. Apakah ada sintaks yang lebih cepat yang akan berfungsi?


76
2018-05-12 17:28


asal


Jawaban:


Anda akan melakukan:

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

Itu ... cukup banyak kata "ambil apa yang ada di sebelah kiri, dan untuk setiap parameter template, ekstrak dengan benar."


112
2018-05-12 17:31