我确实为我的函子重载了 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 将是常数
答案 0 :(得分:2)
您不需要标准算法来调用函子。您可以使用函数调用运算符并根据函子的期望传递尽可能多的参数:
Functor{.1, .2}(1, 2);
您只是选择了两种使用一元函子的标准算法作为示例。还有其他标准算法使用不同数量的函子。例如,std::find
使用一个二元函子,例如您示例中的那个。
我想要 ... b ... 保持不变
这就是函子的用途。它们可以组合。这是从二进制函子创建一元函子的示例。我将使用 lambda:
auto unary = [](int a) {
return Functor{.1, .2}(a, 2);
};