다음을 통해 공유


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::refstd::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