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;
}
xxxxxxxxxx
#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
関連項目
- C++23
move_only_function
- C++26
copyable_function
- C++26
function_ref