为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要覆盖operator()?

为什么要覆盖operator()?

C++
慕运维8079593 2019-11-25 10:28:04
在Boost Signals库中,它们正在重载()运算符。这是C ++中的约定吗?对于回调等?我在同事的代码中看到了这一点(他恰好是Boost的忠实粉丝)。在所有的Boost优点中,这只会让我感到困惑。关于这种超载的原因有什么见解?
查看完整描述

3 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

它允许类充当函数。我在一个日志类中使用了该类,在该类中,调用应该是一个函数,但我希望该类有额外的好处。


所以像这样:


logger.log("Log this message");

变成这样:


logger("Log this message");


查看完整回答
反对 回复 2019-11-25
?
MM们

TA贡献1886条经验 获得超2个赞

许多人回答说它是函子,而没有说出函子比普通的旧函数更好的一个重要原因。


答案是函子可以具有状态。考虑一个求和函数-它需要保持运行总计。


class Sum

{

public:

    Sum() : m_total(0)

    {

    }

    void operator()(int value)

    {

        m_total += value;

    }

    int m_total;

};


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 429 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信