8

新しい標準のラムダ式を試していますが、まだよくわかりません。

コードのどこかにラムダがあるとしましょう。

int main( int argc, char * argv[])
{
    //some code
    [](int x, int y)->float
    {
        return static_cast<float>(x) / static_cast<float>(y);
    };
    //some more code here
    //<---now I want to use my lambda-expression here
}

明らかに、複数回使用する必要があるかもしれないので、「すぐに定義するだけ」という答えは機能しません:P では、コードの後半でこのラムダ式を呼び出すにはどうすればよいでしょうか? それへの関数ポインタを作成し、そのポインタを使用する必要がありますか? または、より良い/より簡単な方法はありますか?

4

2 に答える 2

20

を使用してラムダを保存するか、互換性があるものに明示的autoに割り当てることができます。std::function

auto f1 = [](int x, int y)->float{ ..... };
std::function<float(int,int)> f2 = [](int x, int y)->float{ ..... };

float x = f1(3,4);
auto y = f2(5,6);

必要に応じて、いつでもf1orを使用して、後でf2特定の型を構築または割り当てることができます。std::function

std::function<float(int,int)> f3 = f1;
于 2012-08-21T06:28:38.700 に答える
17
auto lambda = [](int x, int y)->float
    {
        return static_cast<float>(x) / static_cast<float>(y);
    };
// code
// call lambda
std::cout << lambda(1, 2) << std::endl;
于 2012-08-21T06:28:21.853 に答える