Boost Function Libraryのboost::functionクラスは、関数ポインタでも関数オブジェクトでもどちらでも格納、呼び出しができる型である。
インデックス
基本的な使い方
boost::function型は、テンプレート引数で関数のシグニチャ、すなわち関数の形を指定する。
以下は、intとcharを引数にとり、doubleを返す関数のシグニチャを持つboost::functionの型である:
boost::function<double(int, char)> f;
boost::functionは、同じシグニチャであれば関数ポインタでも関数オブジェクトでも、どちらでも同じboost::function型の変数に持つことができる。以下に例を示す。一様に扱えていることがわかるだろう。
関数ポインタを格納して呼び出す
#include <iostream>
#include <boost/function.hpp>
int add(int a, int b)
{
return a + b;
}
int main()
{
boost::function<int(int, int)> f = add; // 関数ポインタをboost::functionに格納
const int result = f(2, 3); // 関数呼び出し
std::cout << result << std::endl;
}
実行結果:
5
*関数オブジェクトを格納して呼び出す
#include <iostream>
#include <boost/function.hpp>
struct add {
typedef int result_type;
int operator()(int a, int b) const
{
return a + b;
}
};
int main()
{
boost::function<int(int, int)> f = add(); // 関数オブジェクトをboost::functionに格納
const int result = f(2, 3); // 関数呼び出し
std::cout << result << std::endl;
}
実行結果:
5