Arduino捕获lambda函数作为参数

时间:2018-09-15 11:51:48

标签: c++ lambda arduino

我想将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);
}

0 个答案:

没有答案