函数调用运算符

时间:2011-01-14 09:01:26

标签: c++ stl operator-overloading function-call-operator

  

可能重复:
  C++ Functors - and their uses.
  Why override operator() ?

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

2 个答案:

答案 0 :(得分:8)

该操作符将您的对象转换为仿函数。 Here is nice example of how it is done.

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

#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;
}

答案 1 :(得分:3)

它使对象“可调用”就像一个函数。但是,与函数不同,对象可以保持状态。实际上,一个函数可以在弱意义上使用静态局部函数来执行此操作,但是然后该静态局部函数永久存在于任何线程在任何上下文中对该函数的任何调用。

如果一个对象充当一个函数,那么状态只是该对象的一个​​成员,你可以拥有同一个类中具有自己的成员变量集的其他对象。

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

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