Logo
Section 1 / 2

简介

C++ 通过引入引用包装器(reference wrappers),将引用功能提升到了一个新的高度!

导入

简介

C++ 通过引入引用包装器(reference wrappers),将引用功能提升到了一个新的高度!

引用包装器(reference wrapper)是 <functional> 头文件中定义的一种可拷贝构造(copy-constructible)和可拷贝赋值(copy-assignable)的引用(T&)包装器。它提供了一个行为类似于引用但可以被复制的对象。与传统的引用不同,std::reference_wrapper 支持以下两个额外的使用场景:

  • 可以在标准模板库(STL)的容器中使用,例如:std::vector<std::reference_wrapper<int>> myIntRefVector;
  • 可以复制包含 std::reference_wrapper 成员的类实例,而普通引用通常无法实现这一点。

要访问一个 std::reference_wrapper<int> myInt(1) 所包装的引用,可以使用 get() 方法:myInt.get()。此外,引用包装器也可用于封装并调用可调用对象(callable)。

1// referenceWrapperCallable.cpp 2#include <iostream> 3#include <functional> 4 5void foo(){ 6 std::cout << "Invoked" << std::endl; 7} 8 9int main() { 10 typedef void callableUnit(); 11 std::reference_wrapper<callableUnit> refWrap(foo); 12 13 refWrap(); // 输出:Invoked 14 return 0; 15}

接下来,我们将学习如何创建引用包装器。

对和元组

std::ref 和 std::cref