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::ref 和 std::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