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

标签 c++ algorithm function overloading c++-standard-library

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

相关文章:

c++ - 抽象基类中的静态常量变量

c++ - 为什么我的低级 Windows 键 Hook 停止工作?

javascript - 通过某种合并算法从数组中删除重复对象

java - 我需要在cmd中为基于文本的游戏播放声音

c++ - boost CRC 16 位

c++ - 不使用 for 循环设置整数中的每第 n 位

algorithm - 关于如何使用 OpenCV 或其他算法删除 png 中的小废弃像素的任何想法?

c# - 找到一个点所属的最短线段

c - 通过引用其他函数传递缓冲区

c - C 中的快速排序 : syntax error and undeclared identifiers