Понимание значения '[](){ /* Code */ }' в аргументе

У меня есть этот кусок кода из библиотеки, и я пытаюсь понять 3-й аргумент, я искал Google изо всех сил и не смог найти никаких учебников или ссылок на языке C/C++ об этом.

timeOutTask.set(NODE_TIMEOUT, TASK_ONCE, [self = this->shared_from_this()]() {
    Log(CONNECTION, "Time out reached\n");
    self->close();
  });

В частности, я пытаюсь восстановить этот фрагмент кода, который использует вышеупомянутый метод.

blinkNoNodes.set(BLINK_PERIOD, (mesh.getNodeList().size() + 1) * 2, []() {
  // If on, switch off, else switch on
  if (onFlag)
    onFlag = false;
  else
    onFlag = true;
  blinkNoNodes.delay(BLINK_DURATION);

  if (blinkNoNodes.isLastIteration()) {
    // Finished blinking. Reset task for next run 
    // blink number of nodes (including this node) times
    blinkNoNodes.setIterations((mesh.getNodeList().size() + 1) * 2);
    // Calculate delay based on current mesh time and BLINK_PERIOD
    // This results in blinks between nodes being synced
    blinkNoNodes.enableDelayed(BLINK_PERIOD - 
        (mesh.getNodeTime() % (BLINK_PERIOD*1000))/1000);
  }
});

Мой вопрос сводится к тому, что на самом деле делает [](){ /*Code*/ } в аргументе функции?

, 👍0

Обсуждение

[Лямбда-функции](https://en.cppreference.com/w/cpp/language/lambda), @KIIV

Спасибо, что указали мне правильное направление, закрою вопрос., @Richard Haes Ellis

Кстати, если вы используете Arduino на основе AVR, вы ничего не сможете захватить, так как он больше не может быть преобразован в указатель функции. Однако на платах на базе ARM вы можете использовать std::функцию, labmdas с захватами или даже std::привязку для создания обратных вызовов, @KIIV


1 ответ


0

Как любезно указал КИИВ, это связано с лямбда-функциями

,

пожалуйста, объясните в своем ответе, @jsotola