gpt4 book ai didi

c++ - std::transform 中未解析的重载函数类型

转载 作者:行者123 更新时间:2023-12-05 09:30:54 26 4
gpt4 key购买 nike

我正在尝试为 double 编写重载函数和 vector<double> .

我刚刚做了以下事情:


constexpr double degrees(double val) { return v * M_1_PI * 180.0; }

std::vector<double> degrees(const std::vector<double>& val)
{
std::vector<double> out;
out.reserve(val.size());
std::transform(val.begin(), val.end(), std::back_inserter(out), degrees);
return out;
}

我希望这会相当简单,但它无法编译,而且我无法弄明白。编译器无法解析重载的 degrees功能,并不断提示

couldn't deduce template parameter '_UnaryOperation'

编辑:用reserve修复部分, 这是一个明显的错误。

最佳答案

您需要指定应将哪个重载传递给 std::transform .例如

std::vector<double> degrees(const std::vector<double>& val) {
std::vector<double> out;
out.reserve(val.size());
std::transform(val.begin(), val.end(), std::back_inserter(out), static_cast<double(*)(double)>(degrees));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
return out;
}

顺便说一句:std::vector<double> out(val.size());会 build out包含val.size()具有值的元素 0.0 .我想这不是你想要的。默认初始化和 reserve会好的。

关于c++ - std::transform 中未解析的重载函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69219832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com