我有一个定义 lambda 函数的结构。下面是该结构的代码
AccumulateUtils.cpp 文件
#include <functional>
template <typename T>
struct AccumulateUtils {
std::function<T()> add_first = [] (T value, const T& pair) {
return value + pair.first;
};
};
在 main()
中,此结构与 std::accumulate
一起用于计算 map 第一个索引的总和。这是代码:
main.cpp 文件
#include <iostream>
#include <map>
#include <numeric>
#include "AccumulateUtils.cpp"
int main() {
std::map<double, int> data = /*some map*/;
AccumulateUtils<double> utils;
std::cout << std::accumulate(data.begin(), data.end(), 0.0, utils.add_first);
return 0;
}
Compiler 给出以下错误:
Error C2228 left of '.first' must have class/struct/union
Error C2664 'std::function::function(std::function &&)': cannot convert argument 1 from 'AccumulateUtils::' to 'std::nullptr_t
为什么会出现这些错误?代码有什么问题?
最佳答案
您的 lambda 函数的签名 ???(T, T const &)
不能隐藏到 T()
,std 的签名::函数
。
此外,lambda 本身也被破坏了,因为 T
不能既是一个值又是一对值。有点像
std::function<T(T, std::pair<T, T> const &)> fun =
[](T value, std::pair<T, T> const & pair)
{
return value + pair.first;
};
有效,但我不确定这是否是您想要完成的。
关于c++ - 在结构中调用 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44969290/