首页 > 解决方案 > 将多个参数传递给函子

问题描述

我确实为我的函子重载了 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 将是恒定的

标签: c++

解决方案


您不需要标准算法来调用函子。您可以使用函数调用运算符并传递函子期望的尽可能多的参数:

Functor{.1, .2}(1, 2);

您只是选择了两个使用一元函子作为示例的标准算法。还有其他标准算法使用不同数量的函子。例如,std::find使用二元仿函数,例如您的示例中的那个。

我要... b ... 保持不变

这就是函子的用途。它们可以组成。这是从二进制函子创建一元函子的示例。我将使用 lambda:

auto unary = [](int a) {
    return Functor{.1, .2}(a, 2);
};

推荐阅读