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 typedef 是已包装函数的弱结果类型的同义词。 typedef 仅对函数类型有意义。

示例

// 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