関数オブジェクト
提供: 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
関連項目
ツイート
スポンサーリンク