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