欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C++里的仿函数到底有什么用途?

最编程 2024-01-12 17:46:00
...

问题

C++ 仿函数是干什么用的?

回答

仿函数,其实就是重载了括号运算符 () 的对象, 不过它具有函数的一些性质, 可以在需要函数的地方(主要是各种容器和算法)使用。

struct add_x {
  add_x(int val) : x(val) {}  // Constructor
  int operator()(int y) const { return x + y; }

private:
  int x;
};

// Now you can use it like this:
add_x add42(42); // create an instance of the functor class
int i = add42(8); // and "call" it
assert(i == 50); // and it added 42 to its argument

std::vector<int> in; // assume this contains a bunch of values)
std::vector<int> out(in.size());
std::transform(in.begin(), in.end(), out.begin(), add_x(1)); 
assert(out[i] == in[i] + 1); // for all i

跟普通函数最大的不同是:仿函数可以拥有(多个)状态。就像上面的 add42,通过构造函数里的参数传入值。这样我们在需要时,就可以再构造一个 add1 add2 来使用,更灵活。如果换成普通函数,那么就需要多传入一个参数。

C++11 带来了 std::bindstd::function,它们也可以完成仿函数的工作。