はじめに
functionクラステンプレートは、パラメータの型リストArgTypes...、戻り値の型Rに合致する、あらゆる関数ポインタ、関数オブジェクト、メンバ関数ポインタ、メンバ変数ポインタを保持できるクラスです。
使用例
#include <iostream> #include <functional> using namespace std; // 通常の関数 int add(int a, int b) { return a + b; } // 関数オブジェクト class Functor { public: int operator() (int a, int b) { return a + b; } }; // クラスを宣言 class Calculater { public: static int AddMethod(int a, int b) { return a + b; } }; int main(void){ std::function<int (int,int)> f; auto func = [](int a, int b)->int { return a + b; }; f = func; // ラムダ式を代入 std::cout << "To assign Class template std::function to lambd : "<< f(1, 2) << std::endl; f = nullptr; f = &add; // 関数ポインタ代入 std::cout << "To assign Class template std::function to function pointer : "<< f(3, 4) << std::endl; f = nullptr; f = Functor(); // 関数オブジェクト代入 std::cout << "To assign Class template std::function to Functor : "<< f(5, 6) << std::endl; f = nullptr; Calculater calculate; f = calculate.AddMethod; // クラスの静的メンバ関数を代入 std::cout << "To assign Class template std::function to Class Member Method : "<< f(7, 8) << std::endl; }
To assign Class template std::function to lambd : 3 To assign Class template std::function to function pointer : 7 To assign Class template std::function to Functor : 11 To assign Class template std::function to Class Member Method : 15