mercredi 16 mai 2018

validity of the lambda function return value

I'm back to programming in C ++ after many years and I have some doubts.

I created this function:

typedef  std::function<const char *(void)> GetMessageLog;

void addLog(byte logLevel, GetMessageLog get)
{
  if (loglevelActiveFor(LOG_TO_SERIAL, logLevel)) {
    Serial.print(millis());
    Serial.print(F(" : "));
    Serial.println(get());
  }
  if (loglevelActiveFor(LOG_TO_SYSLOG, logLevel)) {
    syslog(logLevel, get());
  }
  if (loglevelActiveFor(LOG_TO_WEBLOG, logLevel)) {
    Logging.add(logLevel, get());
  }    
}

I would like to use it as follows:

addLog(LOG_LEVEL_INFO, [&]()
{
  String log = F("HX711: GPIO: SCL=");
  log += pinSCL;
  log += F(" DOUT=");
  log += pinDOUT;
  return log.c_str();
});

The validity of log.c_str () is guaranteed until addLog ends or if something interrupts the normal program flow (any event handler), the string object is destroyed?

Aucun commentaire:

Enregistrer un commentaire