• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class template
    <functional>

    std::function

    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
    C++17で削除
    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
    C++17から非推奨
    C++20で削除
    first_argument_type 第1引数の型(引数が2つの場合のみ定義される) C++11
    C++17から非推奨
    C++20で削除
    second_argument_type 第2引数の型(引数が2つの場合のみ定義される) C++11
    C++17から非推奨
    C++20で削除

    非メンバ関数

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

    推論補助

    名前 説明 対応バージョン
    (deduction_guide) クラステンプレートの推論補助 C++17

    その他

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

    #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

    関連項目

    参照