【发布时间】:2018-01-14 21:11:27
【问题描述】:
我正在尝试创建一个 lambda 函数 lambdaMinMax,它将泛型数组的最小值和最大值作为元组返回。我正在尝试使用decltype,但我不确定我是否正确:
auto lambdaMinMax = [](const auto &v) {
using vType = decltype(v[0]);
vType min = numeric_limits<vType>::min();
vType max = numeric_limits<vType>::max();
auto iterBegin = v.begin();
auto iterEnd = v.end();
std::for_each(iterBegin, iterEnd, [&](const auto &a) mutable {
min = [&]() -> auto { return a < min ? a : min; }();
max = [&]() -> auto { return a > max ? a : max; }();
});
tuple<vType, vType> tupleRet(min, max);
return tupleRet;
};
vector<double> vDouble;
for (double i = 0; i < 50; i++) {
vDouble.push_back(i);
}
auto tupMinMax = lambdaMinMax(vDouble);
cout << "Min: " << get<0>(tupMinMax) << " Max: " << get<1>(tupMinMax) << endl;
运行上述代码时,我收到<function-style-cast>': cannot convert from 'initializer list' to 'vType ' 的错误。我相信这个错误来自两个numeric_limits 行。我是接近还是需要采取不同的方法?
【问题讨论】:
-
不要编辑您的问题以包含答案。它使阅读帖子变得混乱,并且经常使答案无效。注意到答案解决了您的问题的适当方法是将其标记为已接受,您已经这样做了
标签: c++ generics lambda tuples decltype