reference_wrapper 클래스
참조를 래핑합니다.
구문
template <class Ty>
class reference_wrapper
{
typedef Ty type;
reference_wrapper(Ty&) noexcept;
operator Ty&() const noexcept;
Ty& get() const noexcept;
template <class... Types>
auto operator()(Types&&... args) const ->
decltype(std::invoke(get(), std::forward<Types>(args)...));
};
설명
reference_wrapper<Ty>
는 Ty
형식의 개체 또는 함수에 대한 참조를 래핑하며 해당 형식의 개체를 가리키는 포인터가 포함된 복사본 생성/할당 가능 래퍼입니다. reference_wrapper
를 사용하면 표준 컨테이너에 참조를 저장하고 std::bind
에 대한 참조를 통해 개체를 전달할 수 있습니다.
Ty
형식은 개체 형식 또는 함수 형식이어야 하며, 그렇지 않으면 컴파일 시간에 정적 어설션이 실패합니다.
도우미 함수 std::ref 및 std::cref를 사용하여 reference_wrapper
개체를 만들 수 있습니다.
멤버
생성자
속성 | 설명 |
---|---|
reference_wrapper | reference_wrapper 를 생성합니다. |
Typedef
속성 | 설명 |
---|---|
result_type | 래핑된 참조의 약한 결과 형식입니다. |
type | 래핑된 참조 형식입니다. |
함수
속성 | 설명 |
---|---|
get | 래핑된 참조를 가져옵니다. |
연산자
속성 | 설명 |
---|---|
operator Ty& |
래핑된 참조에 대한 포인터를 가져옵니다. |
operator() | 래핑된 참조를 호출합니다. |
get
래핑된 참조를 가져옵니다.
Ty& get() const noexcept;
설명
구성원 함수는 래핑된 참조를 반환합니다.
예시
// std__functional__reference_wrapper_get.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int main() {
int i = 1;
std::reference_wrapper<int> rwi(i);
std::cout << "i = " << i << std::endl;
std::cout << "rwi = " << rwi << std::endl;
rwi.get() = -1;
std::cout << "i = " << i << std::endl;
return (0);
}
i = 1
rwi = 1
i = -1
연산자 Ty&
래핑된 참조를 가져옵니다.
operator Ty&() const noexcept;
설명
멤버 연산자는 *ptr
를 반환합니다.
예시
// std__functional__reference_wrapper_operator_cast.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int main() {
int i = 1;
std::reference_wrapper<int> rwi(i);
std::cout << "i = " << i << std::endl;
std::cout << "(int)rwi = " << (int)rwi << std::endl;
return (0);
}
i = 1
(int)rwi = 1
operator()
래핑된 참조를 호출합니다.
template <class... Types>
auto operator()(Types&&... args);
매개 변수
유형
인수 목록 유형입니다.
args
인수 목록입니다.
설명
템플릿 구성원 operator()
는 std::invoke(get(), std::forward<Types>(args)...)
를 반환합니다.
예시
// std__functional__reference_wrapper_operator_call.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int neg(int val) {
return (-val);
}
int main() {
std::reference_wrapper<int (int)> rwi(neg);
std::cout << "rwi(3) = " << rwi(3) << std::endl;
return (0);
}
rwi(3) = -3
reference_wrapper
reference_wrapper
를 생성합니다.
reference_wrapper(Ty& val) noexcept;
매개 변수
Ty
래핑할 형식입니다.
val
래핑할 값입니다.
설명
생성자는 저장된 값 ptr
을 &val
로 설정합니다.
예시
// std__functional__reference_wrapper_reference_wrapper.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int neg(int val) {
return (-val);
}
int main() {
int i = 1;
std::reference_wrapper<int> rwi(i);
std::cout << "i = " << i << std::endl;
std::cout << "rwi = " << rwi << std::endl;
rwi.get() = -1;
std::cout << "i = " << i << std::endl;
return (0);
}
i = 1
rwi = 1
i = -1
result_type
래핑된 참조의 약한 결과 형식입니다.
typedef R result_type;
설명
result_type
형식 정의는 래핑된 함수의 취약한 결과 형식과 동일한 의미입니다. 이 형식 정의는 함수 형식에서만 의미가 있습니다.
예시
// std__functional__reference_wrapper_result_type.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int neg(int val) {
return (-val);
}
int main() {
typedef std::reference_wrapper<int (int)> Mywrapper;
Mywrapper rwi(neg);
Mywrapper::result_type val = rwi(3);
std::cout << "val = " << val << std::endl;
return (0);
}
val = -3
type
래핑된 참조 형식입니다.
typedef Ty type;
설명
typedef는 템플릿 인수 Ty
의 동의어입니다.
예제
// std__functional__reference_wrapper_type.cpp
// compile with: /EHsc
#include <functional>
#include <iostream>
int neg(int val) {
return (-val);
}
int main() {
int i = 1;
typedef std::reference_wrapper<int> Mywrapper;
Mywrapper rwi(i);
Mywrapper::type val = rwi.get();
std::cout << "i = " << i << std::endl;
std::cout << "rwi = " << val << std::endl;
return (0);
}
i = 1
rwi = 1