【问题标题】:What is the ()() operator in C++? [duplicate]C++ 中的 ()() 运算符是什么? [复制]
【发布时间】:2021-11-26 13:13:04
【问题描述】:

void operator()() 做什么?在尝试用 python 重写 C++ 程序时发现了这一点,但甚至无法理解此方法的功能。它不是从代码中的任何地方调用的,而是由程序调用的,并且不能真正理解这是什么意思?程序本身什么时候调用这样的东西?

class MoistureSensor {
    const std::chrono::seconds sleepTime;
    std::mutex& mtx;
    std::set<WaterDevice*> devices;

    const int min = 0;
    const int max = 10;
    const int threshold = 3;

public:
    MoistureSensor(const std::chrono::seconds sleepTime, std::mutex& mtx)
        : sleepTime{ sleepTime }
        , mtx{ mtx }
    {
    }

    void subscribe(WaterDevice& device) {
        devices.insert(&device);
    }

    void operator()(){
        for (;;) {
            std::cout << "this\n";
            std::unique_lock<std::mutex> lock(mtx);

            if (isAirTooDry())
                for (auto p : devices)
                    p->sprinkleWater();
            if (isSoilTooDry())
                for (auto p : devices)
                    p->pourWater();

            lock.unlock();
            std::this_thread::sleep_for(sleepTime);
        }
    }
    void foo();
private:
    bool isAirTooDry();
    bool isSoilTooDry();
    int getAirMoisture();
    int getSoilMoisture();
};

在 Python 中有类似的东西吗?

【问题讨论】:

  • 请添加更多上下文,您在哪里特别找到了该声明。这将有助于其他人研究同一主题。
  • 一般来说,如果您看到operator 关键字并且不知道重载或如何调用它,请查看operators and overloading 上的此页面。
  • 可重载的“函数调用”伪算子函数的名称是operator()。 Python中类似的方法称为__call__

标签: python c++ operator-overloading operator-keyword


【解决方案1】:

这是一个不带任何参数且没有返回值的仿函数。将第一个() 视为运算符的名称,第二个() 表示参数。

例如,如果Foo有这样一个运算符,而fooFoo的一个实例,那么

foo();

将致电void operator()()

如果您想将foo 的构造与其调用分开,这很有用。在许多方面,这是 C++ 中 lambda 函数的先驱,尤其是考虑到您可以完全在函数范围内声明和定义类型。

【讨论】:

    猜你喜欢
    • 2021-03-28
    • 2014-01-15
    • 1970-01-01
    • 2011-09-28
    • 2017-11-21
    • 2015-11-16
    • 2015-01-22
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多