在结构中调用lambda函数

时间:2017-07-07 11:08:41

标签: c++ c++11 lambda structure

我有一个定义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

为什么会出现这些错误?代码有什么问题?

1 个答案:

答案 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

有效,但我不确定这是你想要完成的事情。