8

我正在尝试新标准中的 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 表达式?我是否必须创建一个指向它的函数指针并使用该指针?还是有更好/更简单的方法?

4

2 回答 2

20

您可以使用 lambda 存储 lambda ,或将其明确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);

如有必要,您可以随时使用f1orf2构造或分配给特定类型: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 回答