我正在尝试为 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/