1. ホーム
  2. c++

[解決済み] ラムダを受け取る関数はどのように宣言するのですか?

2023-02-26 11:12:18

質問

インターネット上で多くのチュートリアルを読みましたが、その中で標準ライブラリ(例えば std::find など)でラムダを使用する方法を説明した多くのチュートリアルをインターネット上で読みました。

例えば

int main()
{
    int test = 5;
    LambdaTest([&](int a) { test += a; });

    return EXIT_SUCCESS;
}

をどのように宣言すればよいのでしょうか? LambdaTest ? 最初の引数の型は何ですか?それから、例えば引数として "10" を渡す無名関数をどのように呼び出すことができますか?

どのように解決するのですか?

ラムダに加えて関数ポインタや関数オブジェクトも受け取りたいと思うでしょうから、おそらくテンプレートを使って、どんな引数でも operator() . これはfindのようなstd関数がやっていることです。それは次のようになります。

template<typename Func>
void LambdaTest(Func f) {
    f(10);
}

この定義はc++0xの機能を一切使っていないので、完全に後方互換性があることに注意してください。ラムダ式を使用した関数の呼び出しだけが、c++0x 特有のものです。