7

可能的重复:
C++ 函子 - 及其用途。
为什么要覆盖 operator() ?

我已经看到了operator()在 STL 容器上的使用,但它是什么以及你什么时候使用它?

4

2 回答 2

10

该运算符将您的对象变成函子。这是如何完成的很好的例子。

下一个示例演示如何实现一个类以将其用作仿函数:

#include <iostream>

struct Multiply
{
    double operator()( const double v1, const double v2 ) const
    {
        return v1 * v2;
    }
};

int main ()
{
    const double v1 = 3.3;
    const double v2 = 2.0;

    Multiply m;

    std::cout << v1 << " * " << v2 << " = "
              << m( v1, v2 )
              << std::endl;
}
于 2011-01-14T09:05:54.440 回答
4

它使对象像函数一样“可调用”。与函数不同的是,对象可以保持状态。实际上,一个函数可以使用静态局部函数在微弱的意义上做到这一点,但是对于任何线程在任何上下文中对该函数的任何调用,该静态局部变量都会永久存在。

将对象用作函数时,状态只是该对象的成员,并且您可以拥有同一类的其他对象,这些对象具有自己的一组成员变量。

整个 boost::bind(它基于旧的 STL 绑定器)都是基于这个概念。

该函数具有固定的签名,但通常您需要比签名中实际传递的参数更多的参数来执行操作。

于 2011-01-14T09:18:57.863 回答