나는 함수에 foo
참조를 매개 변수로 가지고 있고, 나는 rvalue와 lvalue 참조에서 다르게 행동하기를 원합니다. 이 방법 즉, 오히려를 rvalue 참조보다템플릿 추론 형을 사용하여 rvalue 및 lvalue 참조에 대해 서로 다른 오버로드를 얻는 방법은 무엇입니까?
template <typename T> foo(T&& x);
을 나는 forwarding reference를 선언했습니다 : 내가 작성하는 경우 알고 (그것은이-에 대해 참조 가치, 내가 추가 할 수 있습니다 변경되지 않음)
template <typename T> foo(const T& x);
template <typename T> foo(T&& x);
내가 원하는 것을 얻을 수 없을 것입니다.
내 질문은 : 두 가지 종류의 참조 사이의 다른 동작에 영향을주는 올바른 방법은 무엇입니까?
포워딩 참조가 원하는 것과 다르기 때문에 원하는 것을 제공 할 수 있습니까? – Barry
@Barry : rvalue 참조를 위해 힙 공간을 할당하고, lvalue 참조에 아무 것도 할당하지 않습니다. 따라서 어떤 종류의 콜백에서 사용할 수 있습니다. – einpoklum
사용자가 핸들러에 대한 참조를 원할 경우 std :: ref에 전달하도록 요구하는 일반적인 방법이 아닙니까? –