我想将lambda函数作为参数传递给另一个函数。 它不适用于成员函数。在这种情况下,Max6675Sensor :: update()。
错误消息: 没有匹配的函数可以调用'Max6675Sensor :: setInterval(const char [7],int,Max6675Sensor :: setup()::)
目标是每2000毫秒调用一次Max6675Sensor :: update()。
我不能使用std :: function->“ std :: function'尚未声明”
感谢您的帮助!
max6675_component.cpp
class Max6675Sensor : public Component
max6675_component.cpp
void Max6675Sensor::setup()
{
thermocouple.begin(this->clkPin, this->csPin, this->soPin);
// does not work
// no matching function for call to 'Max6675Sensor::setInterval(const char [7], int, Max6675Sensor::setup()::<lambda()>)'
this->setInterval("update", 2000, [this]() {
this->update();
});
// works
this->setInterval("update", 2000, []() {
Serial.println("Test");
});
}
void Max6675Sensor::update()
{
this->value = this->thermocouple.readCelsius();
Logger->debug("sensor.max6675", "Neuer Wert: %f", this->value);
}
component.cpp
// Header
void setInterval(const std::string &name, uint32_t interval, void (*f)());
//
void Component::setInterval(const std::string &name, uint32_t interval, void (*f)())
{
int offset = 0;
if (interval != 0)
{
offset = (random(65535) % interval) / 2;
}
this->cancelInterval(name);
struct TimeFunction function { name, TimeFunction::INTERVAL, interval, millis() - interval - offset, f, false };
this->timeFunctions.push_back(function);
}