开发者

Function call operator [duplicate]

开发者 https://www.devze.com 2023-02-04 20:49 出处:网络
This question already has answers here: 开发者_如何学运维Closed 12 years ago. Possible Duplicates:
This question already has answers here: 开发者_如何学运维 Closed 12 years ago.

Possible Duplicates:

C++ Functors - and their uses.

Why override operator() ?

I've seen the use of operator() on STL containers but what is it and when do you use it?


That operator turns your object into functor. Here is nice example of how it is done.

Next example demonstrates how to implement a class to use it as a functor :

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


It makes the object "callable" like a function. Unlike a function though, an object can hold state. Actually a function can do this in a weak sense, using a static local, but then that static local is permanently there for any call to that function made in any context by any thread.

With an object acting as a function, the state is a member of that object only and you can have other objects of the same class that have their own set of member variables.

The entirety of boost::bind (which was based on the old STL binders) is based on this concept.

The function has a fixed signature but often you need more parameters than are actually passed in the signature to perform the action.

0

精彩评论

暂无评论...
验证码 换一张
取 消