最終更新日時:
が更新

履歴 編集

class template
<functional>

std::function(C++11)

namespace std {
  template <class> class function; // 宣言のみ

  template <class R, class... ArgTypes>
  class function<R(ArgTypes...)>;
}

概要

functionクラステンプレートは、パラメータの型リストArgTypes...、戻り値の型Rに合致する、あらゆる関数ポインタ、関数オブジェクト、メンバ関数ポインタ、メンバ変数ポインタを保持できるクラスである。

このクラスは、以下のように使用する:

int add(int x) { return x + 1; }

// 関数を変数に保持する
function<int(int)> f = add;

// 保持している関数を呼び出す
int result = f(1); // result == 2

functionのテンプレート引数には、「戻り値の型(引数の型リスト...)」という形式で、型で関数のシグニチャを指定する。

functionクラスは具体的な関数・関数オブジェクトの型には依存しない。シグニチャが一致していればあらゆる型の関数、関数オブジェクトを代入できる。

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++11
(destructor) デストラクタ C++11
operator= 代入演算子 C++11
swap 他のfunctionオブジェクトと中身を入れ替える C++11
assign 関数オブジェクトとアロケータを再代入する C++11
operator bool 関数呼び出しが可能か調べる C++11
operator() 関数呼び出し C++11
target_type 元となる関数の型情報を取得する C++11
target 元となる関数を取得する C++11

メンバ型

名前 説明 対応バージョン
result_type 関数の戻り値の型(テンプレートパラメータR) C++11
argument_type 第1引数の型(引数が1つの場合のみ定義される) C++11
first_argument_type 第1引数の型(引数が2つの場合のみ定義される) C++11
second_argument_type 第2引数の型(引数が2つの場合のみ定義される) C++11

非メンバ関数

名前 説明 対応バージョン
operator== 等値比較 C++11
operator!= 非等値比較 C++11
swap 2つのfunctionオブジェクトを入れ替える C++11

その他

名前 説明 対応バージョン
uses_allocator functionによる特殊化 C++11

#include <iostream>
#include <functional>

int add(int x) { return x + 1; }

int main()
{
  // 関数を代入
  std::function<int(int)> f = add;

  // 関数オブジェクトを代入
  f = [](int x) { return x + 1; };

  // 保持している関数を呼び出す
  int result = f(1);
  std::cout << result << std::endl;
}

出力

2

バージョン

言語

  • C++11

参照