假设我有这些代码行;
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/