我有一个定义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给出以下错误:
'。first'左边的错误C2228必须有class / struct / union
错误C2664'std :: function :: function(std :: function &amp;&amp;)':无法转换参数1 'AccumulateUtils ::' 到'std :: nullptr_t
为什么会出现这些错误?代码有什么问题?
答案 0 :(得分:0)
您的lambda函数具有签名???(T, T const &)
,该签名不能T()
std::function
的签名。T
。
另外,lambda本身被破坏了,因为std::function<T(T, std::pair<T, T> const &)> fun =
[](T value, std::pair<T, T> const & pair)
{
return value + pair.first;
};
不能同时是值和一对值。像
@using Microsoft.AspNet.Identity
有效,但我不确定这是你想要完成的事情。