편집 : 내가 물어 보는 가장 일반적인 사용 사례는 std::forward_as_tuple()
에서 rvalue-references의 튜플을받는 함수를 만들 때입니다.std :: forward_as_tuple() 결과를 해당 객체의 rvalue-reference 멤버에서 이동할 수있는 여러 함수에 전달합니까?
나는 그들이 내가 조언을 열려있어 (를 rvalue 참조가 있다면 생성자 초기화에 전달 된 객체의이 볼 수있는 회원을 확인했기 때문에이 질문이 마음에 온 이유는 나를 말하는 것은이 잘못 잘못 잘못이다 ... 장래에 이것을 피하기위한 경험 법칙을 따라하기를 바랍니다. 약간 다른 맥락에서, 나는 rvalue-reference 멤버를 가진 객체를 여러 멤버 함수 (또는 함수 객체)에 넘겨 줄지도 모릅니다. 내가 제어 할 수도 있고 제어하지 않을 수도 있고, 멤버들로부터 이동할 수도 있습니다.
template<typename... Args>
void my_func(std::tuple<Args...>&& tup) {
//if tup's members are rvalue references,
//and this function moves guts from tup members, then...
func_i_dont_control(tup);
//what happens here if moves are done on the same members?
another_func_i_dont_control(std::move(tup));
}
나는를 rvalue 참조 회원의 다른 논의와 함께, Use of rvalue reference members?을 검토 한 결과,하지만 난 확실히이 밖으로 정렬하는 것은 매우 수 아니에요.
나는 무엇이 일어날지를 묻는 것뿐만 아니라,이 시나리오가 전혀 일어나지 않아야하는지, 그리고 rvalue-reference 멤버를 포함하는 객체를 지나갈 때 염두에 두어야 할 핵심 규칙을 물어볼 것입니다.
예제에서'tup'을 포기하지 않아야합니까? –
흠, tup 자체가 템플릿 인수가 아닐지라도 나는 여전히 그렇게하겠습니까? 나는 완벽한 포워딩에서 여전히 약간 녹색이다. –
함수 템플릿 매개 변수로 불완전한 형식이 있으면 전달하십시오. –