最終更新日時:
が更新

履歴 編集

関数ポインタと関数オブジェクトを統一的に扱う

Boost Function Libraryboost::functionクラスは、関数ポインタでも関数オブジェクトでもどちらでも格納、呼び出しができる型である。

インデックス

基本的な使い方

boost::function型は、テンプレート引数で関数のシグニチャ、すなわち関数の形を指定する。

以下は、intcharを引数にとり、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

C++の国際標準規格上の類似する機能