Bagikan melalui


Kelas reference_wrapper

Membungkus referensi.

Sintaks

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)...));
};

Keterangan

reference_wrapper<Ty> adalah pembungkus salinan yang dapat dibangun dan disalin yang dapat ditetapkan di sekitar referensi ke objek atau fungsi jenis Ty, dan menyimpan pointer yang menunjuk ke objek jenis tersebut. reference_wrapper dapat digunakan untuk menyimpan referensi dalam kontainer standar, dan untuk meneruskan objek berdasarkan referensi ke std::bind.

Jenis Ty harus berupa jenis objek atau jenis fungsi, atau pernyataan statis gagal pada waktu kompilasi.

Fungsi pembantu std::ref dan std::cref dapat digunakan untuk membuat reference_wrapper objek.

Anggota

Konstruktor

Nama Deskripsi
reference_wrapper Membangun sebuah reference_wrapper.

Typedefs

Nama Deskripsi
result_type Jenis hasil lemah dari referensi yang dibungkus.
jenis Jenis referensi yang dibungkus.

Fungsi

Nama Deskripsi
get Mendapatkan referensi yang dibungkus.

Operator

Nama Deskripsi
operator Ty& Mendapatkan penunjuk ke referensi yang dibungkus.
operator() Memanggil referensi yang dibungkus.

get

Mendapatkan referensi yang dibungkus.

Ty& get() const noexcept;

Keterangan

Fungsi anggota mengembalikan referensi yang dibungkus.

Contoh

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

operator Ty&

Mendapatkan referensi yang dibungkus.

operator Ty&() const noexcept;

Keterangan

Operator anggota mengembalikan *ptr.

Contoh

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

Memanggil referensi yang dibungkus.

template <class... Types>
auto operator()(Types&&... args);

Parameter

Jenis
Jenis daftar argumen.

argumen
Daftar argumen.

Keterangan

Anggota operator() templat mengembalikan std::invoke(get(), std::forward<Types>(args)...).

Contoh

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

Membangun sebuah reference_wrapper.

reference_wrapper(Ty& val) noexcept;

Parameter

Ty
Jenis untuk dibungkus.

Val
Nilai yang akan dibungkus.

Keterangan

Konstruktor mengatur nilai ptr tersimpan ke &val.

Contoh

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

Jenis hasil lemah dari referensi yang dibungkus.

typedef R result_type;

Keterangan

Typedef result_type adalah sinonim untuk jenis hasil lemah dari fungsi yang dibungkus. Typedef ini hanya bermakna untuk jenis fungsi.

Contoh

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

jenis

Jenis referensi yang dibungkus.

typedef Ty type;

Keterangan

Typedef adalah sinonim untuk argumen Tytemplat .

Contoh

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