最終更新日時:
が更新

履歴 編集

class template
<functional>

std::reference_wrapper(C++11)

namespace std {
  template <class T>
  class reference_wrapper;
}

概要

reference_wrapperは、コピー・代入可能なオブジェクトとして持ちまわれる参照オブジェクトを提供する。コピー不可なクラス (例:std::istream) をポインタで保持する代わりにreference_wrapperで保持することができる。また、reference_wrapperクラスは、関数テンプレートに変数を参照として渡すためにも使用できる。

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++11
~reference_wrapper() = default; デストラクタ C++11
operator= 代入演算子 C++11
get 生参照の取得 C++11
operator T&() 生参照への変換 C++11
operator() 関数オブジェクト呼び出し C++11

メンバ型

名前 説明 対応バージョン
type 参照される型 (テンプレートパラメータ T) C++11
result_type Tを関数・関数オブジェクトとして扱った時の戻り値型 C++11
C++17から非推奨
argument_type Tを一引数の関数・関数オブジェクトとして扱った時の引数型 C++11
C++17から非推奨
first_argument_type Tを二引数の関数・関数オブジェクトとして扱った時の第一引数型 C++11
C++17から非推奨
second_argument_type Tを二引数の関数・関数オブジェクトとして扱った時の第二引数型 C++11
C++17から非推奨

非メンバ関数

名前 説明 対応バージョン
ref T&に対応するreference_wrapperオブジェクトの生成 C++11
cref const T&に対応するreference_wrapperオブジェクトの生成 C++11

#include <iostream>
#include <functional>

void f(int& x)
{
  ++x;
}

template <class T>
void g(T x)
{
  f(x);
}

int main()
{
  int x = 3;

  // 関数テンプレートの型推論によって、xの型が非参照のintと見なされる
//g(x);

  // 関数テンプレートに変数を参照として渡す
  g(std::ref(x));

  std::cout << x << std::endl;
}

出力

4

バージョン

言語

  • C++11

処理系

参照