sti*_*ker 3 c++ python operator-overloading operator-keyword
有什么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();
};
Run Code Online (Sandbox Code Playgroud)
Python 中有类似的东西吗?
它是一个不接受任何参数并且没有返回值的函子。将第一个()视为运算符的名称,第二个()表示参数。
例如,如果Foo有这样一个运算符,并且foo是 的实例Foo,那么
foo();
Run Code Online (Sandbox Code Playgroud)
将会通知void operator()()。
如果您想将 的构造foo与其调用分开,它会很有用。在许多方面,这是 C++ 中 lambda 函数的前身,特别是考虑到您可以完全在函数范围内声明和定义类型。
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |