类模板
<functional>

std::reference_wrapper

template <class T> class reference_wrapper;
引用包装器
一个类,它模拟对类型为 T 的元素的引用,但该类是可复制的(它是 可复制构造可复制赋值 的)。

模板参数

T
所引用元素的类型。
这可以是对象,也可以是函数。

成员类型

成员类型定义
类型模板参数 (T)
result_type如果 T 是函数指针或成员函数指针类型:T 的返回类型。
如果 T 是一个类,并且有一个 result_type 成员:T::result_type
否则,未定义。
argument_type如果 T 是函数类型或函数指针类型,它接受单个参数:T 所接受参数的类型。
如果 T 是成员函数指针:T 所属的类类型(具有与成员函数相同的 const/volatile 限定)。
如果 T 是一个类,并且有一个 argument_type 成员:T::argument_type
否则,未定义。
first_argument_type如果 T 是函数类型或函数指针类型,它接受两个参数:T 所接受的第一个参数的类型。
如果 T 是成员函数指针,它接受单个参数:T 所属的类类型(具有与成员函数相同的 const/volatile 限定)。
如果 T 是一个类,并且有一个 first_argument_type 成员:T::first_argument_type
否则,未定义。
second_argument_type如果 T 是函数类型或函数指针类型,它接受两个参数:T 所接受的第二个参数的类型。
如果 T 是成员函数指针,它接受单个参数:T 所接受的参数。
如果 T 是一个类,并且有一个 second_argument_type 成员:T::second_argument_type
否则,未定义。
请注意,除了 type 之外,其他成员类型并非总是已定义。

成员函数


非成员辅助函数


示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// reference_wrapper example:
#include <iostream>     // std::cout
#include <functional>   // std::reference_wrapper

int main () {
  int a(10),b(20),c(30);

  // an array of "references":
  std::reference_wrapper<int> refs[] = {a,b,c};

  std::cout << "refs:";
  for (int& x : refs) std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}

可能的输出
refs: 10 20 30