Câu hỏi Làm thế nào người ta sẽ gọi std :: forward trên tất cả các đối số trong một hàm variadic?


Tôi vừa viết một nhà máy đối tượng chung và sử dụng thư viện meta preprocessor tăng cường để tạo ra một mẫu variadic (sử dụng năm 2010 và nó không hỗ trợ chúng). Hàm của tôi sử dụng tham chiếu rval và std::forward để làm chuyển tiếp hoàn hảo và nó đã cho tôi suy nghĩ ... khi C + + 0X đi ra và tôi đã có một trình biên dịch tiêu chuẩn tôi sẽ làm điều này với các mẫu variadic thực. Tôi sẽ gọi như thế nào std::forward trên các đối số?

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

Cách duy nhất tôi có thể nghĩ đến sẽ yêu cầu giải nén thủ công ... params và tôi không hoàn toàn ở đó. Có cú pháp nhanh hơn có hoạt động không?


76
2018-05-12 17:28


gốc




Các câu trả lời:


Bạn sẽ làm:

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

Các ... khá nhiều nói "lấy những gì bên trái, và cho mỗi tham số mẫu, giải nén nó cho phù hợp."


112
2018-05-12 17:31



Thêm vào đó làm thế nào các thông số nên được thông qua. Tôi nghĩ rằng hướng dẫn hiển thị void f(Params&& ...params) - UncleBens
@Uncle: Đã thêm, tôi nghĩ bạn đã đúng. - GManNickG
Nói chuyện như một ngày cướp biển tôi sử dụng void f(Ar&& ...arg) - woolstar