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 番目のパラメーターよりも小さいかどうかを確認します。 |