C++ の関数型プログラミング手法

PHPz
リリース: 2023-08-22 10:36:20
オリジナル
1388 人が閲覧しました

C言語には優れたプログラミング手法が数多くありますが、その中でも関数型プログラミングは非常に実用的な技術です。関数型プログラミングは関数の再利用性と柔軟性を重視しており、これによりコードがより明確になり保守しやすくなります。この記事では、C による関数型プログラミングのテクニックを紹介します。

1. 関数オブジェクト

関数オブジェクトは呼び出し可能なオブジェクトであり、関数とみなすことができます。 C の関数オブジェクトは、クラス オブジェクトまたは関数ポインターになります。関数オブジェクトは STL アルゴリズムで使用でき、他の関数のパラメーターとしても使用できます。以下は関数オブジェクトの簡単な例です。

class Add
{
public:
    int operator()(int x, int y) const
    {
        return x + y;
    }
};

int main()
{
    Add add;
    int result = add(1, 2);
    return 0;
}
ログイン後にコピー

この例の Add クラスは () 演算子をオーバーロードするため、Add オブジェクトを関数のように呼び出すことができます。関数オブジェクトを使用すると、コードをより簡潔かつ柔軟にすることができます。

2. ラムダ式

ラムダ式は、C 11 で導入された新しい言語機能で、匿名関数を簡単に定義できます。ラムダ式の基本的な構文は次のとおりです:

[capture list] (parameter list) -> return type { function body }
ログイン後にコピー

このうち、キャプチャ リストはラムダ式がキャプチャする必要がある変数のリスト、パラメータ リストはラムダ式のパラメータ リスト、戻り値の型はその値です。ラムダ式。戻り値の型。関数本体はラムダ式の関数本体です。

以下は簡単なラムダ式の例です:

auto add = [] (int x, int y) -> int { return x + y; };
int result = add(1, 2);
ログイン後にコピー

この例のラムダ式は、2 つの int 型パラメータを受け入れ、それらの合計を返す add 関数を定義します。

3. std::function

std::function は、C 11 の関数オブジェクト テンプレート クラスであり、任意の呼び出し可能なオブジェクトを格納できます。 std::function を使用すると、関数オブジェクトとラムダ式を簡単に渡すことができ、コールバック関数やその他のシナリオの実装にも使用できます。以下は、単純な std::function の例です。

std::function<int(int, int)> add = [] (int x, int y) -> int { return x + y; };
int result = add(1, 2);
ログイン後にコピー

この例では、2 つの int 型パラメータを受け入れ、それらの合計を返すことができる std::function オブジェクト add が定義されています。ラムダ式を std::function オブジェクトに割り当てると、関数オブジェクトの保存と転送が可能になります。

4. カリー化

カリー化は、複数のパラメーターを持つ関数を、単一のパラメーターを受け入れる関数のシーケンスに変換する手法です。カリー化により関数をより柔軟にすることができ、部分的なアプリケーション関数などの関数を実装するために使用できます。 C でカリー化を実装するには、関数オブジェクトとラムダ式を使用できます。

次は関数オブジェクトのカリー化の例です:

class Add
{
public:
    int operator()(int x) const
    {
        return x + y;
    }

private:
    int y;
};

int main()
{
    Add add;
    add(1)(2); // 返回3
    return 0;
}
ログイン後にコピー

この例の Add クラスはカリー化を実装します。パラメーター x を受け入れ、それを返して別のパラメーターを受け入れることができます。 y の関数オブジェクト。複数パラメータ関数の計算は、連続呼び出しによって実行できます。

次はラムダ式をカリー化する例です:

auto add = [] (int x) {
    return [=] (int y) {
        return x + y;
    };
};

int main()
{
    int result = add(1)(2); // 返回3
    return 0;
}
ログイン後にコピー

この例のラムダ式は、パラメータ y を受け取り、and の x と y を返す関数オブジェクトを返します。カリー化はラムダ式を通じて実現できます。

概要

この記事では、関数オブジェクト、ラムダ式、std::function、カリー化などの C での関数プログラミング手法を紹介します。これらの手法により、コードの柔軟性と読みやすさが向上し、コードの保守性と再利用性が向上します。実際のプログラム開発では、これらの手法を合理的に適用することで、コードの品質と効率を向上させることができます。

以上がC++ の関数型プログラミング手法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート