共用方式為


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 類型必須是物件類型或函式類型,否則靜態判斷提示會在編譯期間失敗。

Helper 函式 std::refstd::cref 可用來建立 reference_wrapper 物件。

成員

建構函式

名稱 描述
reference_wrapper 建構 reference_wrapper

Typedefs

名稱 描述
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