你可以声明一个没有 auto 和/或模板的 lambda 变量吗?

问题描述 投票:0回答:2

在不使用

auto
或模板的情况下声明 lambda 变量或函数参数的表示法是什么?有什么办法可以做到吗?或者编译器是否为每个 lambda 定义了一个唯一的类对象,其名称在编译前对于程序员来说是未知的?如果是这样,为什么?它们不能作为某种函数指针传递吗?如果这不可能,那将是一个很大的失望。

c++ lambda c++11
2个回答
62
投票

Lambda 可以保存状态(例如从周围上下文捕获的引用);如果没有,它们可以存储在函数指针中。如果这样做,它们必须存储为函数对象(因为函数指针中没有地方可以保存状态)。

// No state, can be a function pointer:
int (*func_pointer) (int) = [](int a) { return a; };

// One with state:
int b = 3;
std::function<int (int)> func_obj = [&](int a) { return a*b; };

26
投票

您可以对函数对象使用多态包装器。例如:

#include <functional>

std::function<double (double, double)> f = [](double a, double b) { return a*b };
© www.soinside.com 2019 - 2024. All rights reserved.