c++ - 将多个参数传递给函子
问题描述
我确实为我的函子重载了 operator(),现在它接收了两个参数。我知道这可能,但我如何调用它?据我所知,作为 std::transform 或 std::for_each 的函数每次都迭代单个参数。
最小的例子:
struct Functor
{
Functor(double epsilon, double delta): ...
float operator()(int a, int b) const;
private:
_epsilon, _delta;
}
Functor f(.1, .2);
std::vector v = {1, 2, 3, 4}; // a should be taken from here each time
int b = 10;
std::vector k; // save result into k
std::transform(v.begin(), v.end(), b, k, f);
谢谢你!
编辑:我这样做是因为我希望每次都从 v 中获取 a,而 b 将是恒定的
解决方案
您不需要标准算法来调用函子。您可以使用函数调用运算符并传递函子期望的尽可能多的参数:
Functor{.1, .2}(1, 2);
您只是选择了两个使用一元函子作为示例的标准算法。还有其他标准算法使用不同数量的函子。例如,std::find
使用二元仿函数,例如您的示例中的那个。
我要... b ... 保持不变
这就是函子的用途。它们可以组成。这是从二进制函子创建一元函子的示例。我将使用 lambda:
auto unary = [](int a) {
return Functor{.1, .2}(a, 2);
};
推荐阅读
- tensorflow - 找到卷积层和密集层的数量
- javascript - 手动设置 Panopto 的速度
- r - 如何用 2 个变量绘制直方图
- python - 在 input() 提示中打印列表的元素,没有 .join 并将列表转换为 str
- javascript - JavaScript:切换按钮禁用属性
- r - 在r中的单元格内强制冒号运算符或从字符到向量的破折号
- c# - 使用 Registry 类的结果 Regedit 查询和 c# 程序查询的差异
- c - 在单链表中的第一次循环后输入数据时,gets() 函数被跳过
- android - Google Play 管理中心订阅设置的更改
- javascript - 在多维 JSON 及其父/子中查找值/字符串