将多个参数传递给函子

时间:2021-05-24 23:46:39

标签: 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 将是常数

1 个答案:

答案 0 :(得分:2)

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

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

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

<块引用>

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

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

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