在结构中调用 lambda 函数

Calling to lambda function in 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;
}

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::function 的签名。 此外,lambda 本身也被破坏了,因为 T 不能既是一个值又是一对值。像

std::function<T(T, std::pair<T, T> const &)> fun = 
[](T value, std::pair<T, T> const & pair)
{
  return value + pair.first;
};

可行,但我不确定这是否是您想要完成的。