HOWTO · C++

C++ のファンクタ

C++ でのファンクタの使用に関する簡単なチュートリアル。

このページの内容

この簡単なチュートリアルでは、ファンクタと C++ プログラミング言語でのそれらの使用法を紹介します。最初に、この記事ではファンクターを簡単に紹介し、次にその構文と使いやすさについて説明します。

C++ の Functors の紹介

ファンクターは、関数のように動作できるクラスオブジェクトです。C++ 標準テンプレートライブラリ(STL)には多数の機能があり、独自の機能を作成することもできます。

ファンクタの主な利点は、関数ではありませんが、クラスオブジェクトであるため、状態を保存できることです。

関数は、任意のクラスの演算子 () をオーバーロードして、単純な関数を呼び出すときにそのクラスのオブジェクトを呼び出すことができるようにすることで作成されます。

明確に理解するために、以下の例を見てみましょう。

class Hello {
 public:
  void operator()() { cout << "Hello from Functor" << endl; }
};

これを使用するために、Hello クラスのオブジェクトを作成し、次のように呼び出します。

int main() {
  Hello hello;
  hello();
  return 0;
}

出力:

Hello from Functor

出力から、オブジェクトを演算子で使用すると、関数呼び出し演算子 () が呼び出されることがわかります。

C++ のパラメーターを持つ Functors

ファンクターは、関数と同様に、いくつかのパラメーターと return-type を持つものとして定義することもできます。以前の関数を修正して、パラメーターを含めることができます。

class Hello {
 public:
  void operator()(string name) {
    cout << "Hello " << name << " from Functor" << endl;
  }
};

これを呼び出すには、パラメータも渡す必要があります。

int main() {
  Hello hello;
  hello("david");
  return 0;
}

出力:

Hello david from Functor

C++ で事前定義された Functors

C++ 標準テンプレートライブラリにパッケージ化されている機能ヘッダーファイルには、多数の機能が含まれています。それらのいくつかはここで議論されます。

ファンクター名 説明
plus パラメータとして渡された 2つの数値の合計を計算します。
minus パラメータとして渡された 2つの数値の差を計算します。
multiplies パラメータとして渡された 2つの数値の積を計算します。
divides パラメータとして渡された 2つの数値の除算結果を計算します。
equal_to 渡された 2つのパラメーターが等しいかどうかを確認します。
not_equal_to 渡された 2つのパラメーターが等しくないかどうかを確認します。
greater 最初のパラメーターが 2 番目のパラメーターより大きいかどうかを確認します。
less 最初のパラメーターが 2 番目のパラメーターよりも小さいかどうかを確認します。