cの関数オブジェクト、またはファンサーは、 operator()
を定義するクラスのインスタンスです。これにより、オブジェクトを機能であるかのように使用できます。ファンチャーを使用するには、最初にoperator()
メソッドを使用してクラスを定義し、次にそのクラスのインスタンスを作成します。使用法を説明する簡単な例を次に示します。
<code class="cpp">#include <iostream> class Multiply { public: int operator()(int x, int y) { return x * y; } }; int main() { Multiply mul; // Create a functor instance std::cout </iostream></code>
この例では、 Multiply
、2つの整数を取り、製品を返すoperator()
メソッドを備えたFunctorクラスです。 Multiply
のmul
を作成すると、 mul(3, 4)
の関数のように呼び出すことができます。これは12
出力します。
Cの通常の機能でファンクターを使用することにはいくつかの利点があります。
std::sort
やstd::find_if
などの多くの標準ライブラリアルゴリズムは、関数を引数として受け取り、より柔軟で強力にすることができます。 Cにカスタムファンチャーを実装するには、 operator()
メソッドを使用してクラスを定義する必要があります。以下は、それが呼ばれる回数をカウントするカスタムファンチャーの例です。
<code class="cpp">#include <iostream> class CallCounter { private: int count; public: CallCounter() : count(0) {} void operator()() { count; std::cout </iostream></code>
この例では、 CallCounter
はプライベートcount
メンバー変数を保持するカスタムファンチャーです。ファンチャーが呼び出されるたびに、カウントを増加させ、現在のカウントを印刷します。
ファンクターは、さまざまな目的でCプログラミングで広く使用されています。一般的なユースケースは次のとおりです。
カスタムソート:ファンチャーはstd::sort
で使用して、カスタムソート基準を定義できます。たとえば、特定の属性に基づいてオブジェクトのベクトルをソートできます。
<code class="cpp">struct Person { std::string name; int age; }; struct SortByAge { bool operator()(const Person& a, const Person& b) { return a.age people = {...}; std::sort(people.begin(), people.end(), SortByAge());</code>
アルゴリズムのカスタマイズ: std::find_if
、 std::accumulate
、 std::transform
などの多くの標準ライブラリアルゴリズムは、機能をカスタマイズするために機能者を連れて行くことができます。
<code class="cpp">std::vector<int> numbers = {1, 2, 3, 4, 5}; auto even = std::find_if(numbers.begin(), numbers.end(), [](int x) { return x % 2 == 0; });</int></code>
これらの例は、ConfctorがCコードの柔軟性と表現力を高める方法を示しており、最新のCプログラミングの強力なツールになります。
以上がcで関数オブジェクト(ファンクター)を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。