我有一个定义lambda函数的结构。下面是该结构调用结构中的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
来算图的第一指标的总和的代码。下面是代码:
的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;
}
Сompiler提供了以下错误:
错误C2228左 '首先' 必须有类/结构/联合
错误C2664'std :: function :: function(std :: function & &)':无法将参数1从 'AccumulateUtils ::' to'std :: nullptr_t
为什么这些错误?代码中出现了什么问题?
*为什么*它必须是lambda?为什么你不能在命名空间中使用正常的模板函数? –
为什么不重载'operator()' –
至于你当前的代码,你没有看到任何问题,你声明'std :: function'带* no *参数,并让lambda带两个参数?或者让模板类型“T”表示*两个*事物(包括'double' *和* a'std :: pair')? –