<개요> C++11에 추가된 참조를 래핑하는 클래스 std::reference_wrapper 와 도우미 역할인 std::ref, std::cref에 대해 작성합니다. |
<std::reference_wrapper> std::reference_wrapper는 다음과 같이 작성돼 있습니다.
reference_wrapper<Ty> 는 Ty 형식의 객체 또는 함수에 대한 참조를 래핑하며 해당 형식의 개체를 가르키는 포인터가 포함된 복사본/할당 가능 래퍼입니다. reference_wrapper 를 사용하면 표준 컨테이너에 참조를 저장하고, std::bind에 대한 참조를 통해 객체를 전달할 수 있습니다.
get을 통해 래핑된 참조를 가져옵니다.
std::ref 는 대부분 std::bind와 결합되어 사용됩니다. 위의 상황에서 n 이 5로 증가했을때 print2만 바뀐 이유는 n을 std::ref로 감쌌기 때문입니다. 내부에선 ptr이 n을 가리키고 있는 상태라고 생각하시면 쉽습니다.
위 T의 타입은 int 입니다. 그러나 ++는 std::ref 의 타겟의 참조가 될 _t.operator int&() 에 반영됩니다. 왜냐면 operator Ty&() 때문에 std::reference_wrapper<int>에서 int& 로의 암시적 변환이 일어나기 때문입니다. 사실 작성해보니 예시가 조금 적은 것 같은데, 생각나면 더 올리겠음. |
'C++ > Modern' 카테고리의 다른 글
C++14) 일반화 람다 ( Generic lambda ) (0) | 2019.02.20 |
---|---|
C++11) 스마트 포인터 ( auto_ptr, unique_ptr, shared_ptr, weak_ptr) (2) | 2019.02.15 |
C++11) 사용자 정의 리터럴 (0) | 2019.02.13 |
C++11) extern template (0) | 2019.02.13 |
C++11) std::tuple (0) | 2019.02.10 |