関数オブジェクト

提供: C++入門
2013年3月22日 (金) 01:22時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「<!-- vim: filetype=mediawiki --> プログラミング言語の関数オブジェクト(function object)は、関数をオブジェクトにしたものです。 読...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク


プログラミング言語の関数オブジェクト(function object)は、関数をオブジェクトにしたものです。

読み方

関数オブジェクト
かんすう おぶじぇくと
function object
ふぁんくしょん おぶじぇくと

概要

()演算子をオーバーロードしたものを関数オブジェクト(ファンクタ)と呼びます。 関数オブジェクトは、

operator()()

と表します。

関数オブジェクトを作ってみる例

ソースコード function_object_0.cpp

引数をただ表示するだけの関数オブジェクトの例です。

呼び出し方は、

PrintFunctor()(引数);

となります。

#include <iostream>     // std::cout, std::endl
#include <vector>       // std::vector
 
struct PrintFunctor {
        // 引数を表示するだけの関数オブジェクト
        void operator()(int i) {
                std::cout << i << std::endl;
        }
};
 
int
main(int argc, char const* argv[])
{
 
        PrintFunctor()(1);
        PrintFunctor()(2);
        PrintFunctor()(3);
 
        return 0;
}

コンパイル

g++  function_object_0.cpp -o function_object_0

実行例

% ./function_object_0
2
3
4
5

簡単な関数オブジェクトの例

ソースコード function_object_1.cpp

#include <iostream>     // std::cout, std::endl
#include <vector>       // std::vector
#include <algorithm>    // std::for_each
 
struct IncrementFunctor {
	// インクリメントするだけの関数オブジェクト
        void operator()(int& i) {
                ++i;
        }
};
struct PrintFunctor {
	// 引数を表示するだけの関数オブジェクト
        void operator()(int& i) {
                std::cout << i << std::endl;
        }
};
 
int
main(int argc, char const* argv[])
{
        std::vector<int> v;
        v.push_back(1);
        v.push_back(2);
        v.push_back(3);
        v.push_back(4);
 
        std::for_each(v.begin(), v.end(), IncrementFunctor() );
        std::for_each(v.begin(), v.end(), PrintFunctor() );
 
        return 0;
}

コンパイル

g++  function_object_1.cpp -o function_object_1

実行例

% ./function_object_1
2
3
4
5

関連項目




スポンサーリンク