函数调用运算符

发布于 2024-10-11 23:58:36 字数 333 浏览 1 评论 0原文

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

我见过operator()的使用 在 STL 容器上,但它是什么以及什么时候使用它?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仙气飘飘 2024-10-18 23:58:36

该运算符将您的对象变成函子。 这是一个很好的示例,说明了如何完成此操作。

下一个示例演示如何实现一个类并将其用作函子:

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

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;
}
风尘浪孓 2024-10-18 23:58:36

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

对于充当函数的对象,状态仅是该对象的成员,并且同一类的其他对象可以拥有自己的成员变量集。

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

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文