variadic 함수의 모든 인수에 대해 std :: forward를 어떻게 호출합니까?


115

난 그냥 일반 개체 팩토리를 작성하고 부스트 전 처리기 메타 라이브러리를 사용하여 가변 템플릿을 만들었습니다 (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.
}

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

답변:


162

당신은 할 것입니다 :

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

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


1
여기에 매개 변수를 전달하는 방법을 추가하십시오. 나는 튜토리얼 쇼void f(Params&& ...params)
UncleBens

87
해적 일 I 사용과 같은 이야기에void f(Ar&& ...arg)
woolstar

rvalue 참조 &&의 선택 동기를 설명해주세요 (& 참조 대신 또는 상황에 따라 값으로)
DavidJ

@DavidJ 나는 동기 부여를 질문에 넣었습니다. 그러나 참조 : stackoverflow.com/questions/3582001/advantages-of-using-forward
GManNickG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.