c++ - 参数类型自动推导和匿名 lambda 函数

标签 c++ lambda c++11

假设我有这些代码行;

std::vector<int> ints;
std::for_each(ints.begin(), ints.end(), [](int& val){ val = 7; });

但是,我不想在我的 lambda 函数中指定参数类型,即我想写这样的东西;

std::for_each(ints.begin(), ints.end(), [](auto& val){ val = 7; });

有没有办法做到这一点?

(boost::lambda 不需要指定类型...)


更新:

现在我使用一个宏:#define _A(container) decltype(*std::begin(container)) 所以我可以这样做:

std::for_each(ints.begin(), ints.end(), [](_A(ints)& val){ val = 7; });

最佳答案

没有。 “多态 lambdas”是 C++ 委员会讨论期间提到的这个特性,它没有标准化。必须指定 lambda 的参数类型。

您可以使用 decltype:

std::for_each(ints.begin(), ints.end(), [](decltype(*ints.begin())& val){ val = 7; });

关于c++ - 参数类型自动推导和匿名 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5712826/

相关文章:

c++ - 有没有办法在不分配变量的情况下将字符串连接到数字?

java - 如何使用 java 8 lambda 表达式遍历两个流并保持计数

android - 表达式中 ObservableFields 的 get()

c# - 绑定(bind)函数(委托(delegate))参数

c++ - 如何以几秒的间隔多次使用 QTcpSocket 实例?

c++ - 使用 Stencil-buffer 绘制 3D 模型的轮廓

c++ - 未能从 lambda 函数中推断出模板参数 std::function

c++ - 编译器错误,因为构造函数必须显式初始化成员

c++ - 如果在互斥锁下没有修改共享原子变量,则无法正确发布

c++ - 可变参数模板的模板语法问题