variadic 함수의 모든 인수에 대해 std :: forward를 어떻게 호출합니까? 전 처리기 메타 라이브러리를 사용하여

난 그냥 일반 개체 팩토리를 작성하고 부스트 전 처리기 메타 라이브러리를 사용하여 가변 템플릿을 만들었습니다 (2010을 사용하고 지원하지 않음). 내 함수는 rval 참조를 사용하고 std::forward완벽한 포워딩을 수행하기 위해 C ++ 0X가 나오고 표준 컴파일러가있을 때 실제 가변 템플릿으로이 작업을 수행 할 것이라고 생각했습니다. 그래도 내가 std::forward논쟁을 불러 일으키겠습니까?

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

내가 생각할 수있는 유일한 방법은 … 매개 변수를 수동으로 풀어야하며 아직 거기에 있지 않습니다. 작동하는 더 빠른 구문이 있습니까?



답변

당신은 할 것입니다 :

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

...거의 “왼쪽에 무엇을 가지고, 각 템플릿 매개 변수에 대해 적절하게 압축을 풉니 다.”라고