我有一個定義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')? –