【发布时间】: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