C++代码中将函数作为参数传递

5

我有这段代码:

void longitudeChanged() {
  Serial.println("Longitude: " + String(GpsLon.value,8));
}

在主函数中:

  GpsLon.onUpdate(longitudeChanged);

我想做类似于这样的事情:

GpsLon.onUpdate({
  Serial.println("Longitude: " + String(GpsLon.value,8));
});

(就像我在 JavaScript 中所做的那样!)但这不是正确的方法。怎么办呢?
谢谢
Erik

这到底是什么意思?你根本不应该这样做。 - Rivasa
2
@Link 应该怎么做? - wally
看一下 @OMGTechy 的回复。 - Rivasa
1个回答

8

看啊,强大的 Lambda!

#include <iostream>

template <typename T>
void myFunction(T t) {
    t();
}

int main() {
    myFunction([](){ std::cout << "Hi!" << std::endl; });
}

如果您想了解更多关于它们的知识,请看这里。

为了简单解释一下,以下是一个分解:

  • 你有一个函数,它通过模板参数接受另一个函数。
  • 该函数除了调用其参数外,什么也不做。
  • 在main函数内,你使用一个lambda作为参数来调用该函数。
  • lambda可以分为三个部分:[](捕获,现在不用太担心),()函数参数,在这种情况下没有参数)和{...}(主体,就像任何其他函数一样)。

因此,lambda部分只是这样的:

[](){ std::cout << "Hi!" << std::endl; }

这是一个 lambda 表达式的例子,它接受一个整数并返回其两倍的值:

[](int value){ return value * 2; }

是的 - 这正是我正在寻找的。谢谢。 - Erik P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接