多次调用lambda表达式

时间:2012-08-21 06:27:03

标签: c++ c++11 lambda

我正在尝试新标准的lambda表达式,但仍然不太了解它们。

假设我的代码中有一个lambda,例如在我的主要:

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所以,我如何在代码中稍后调用这个lambda表达式?我是否必须创建一个函数指针并使用该指针?或者有更好/更简单的方法吗?

2 个答案:

答案 0 :(得分:20)

您可以使用auto存储lambda,或明确地将其分配给兼容的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);

如有必要,您可以随后使用f1f2构建或指定特定的std::function类型:

std::function<float(int,int)> f3 = f1;

答案 1 :(得分:16)

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;