函数中的C ++代码作为参数

时间:2016-09-06 16:25:00

标签: c++ function arduino

我有这段代码:

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

在main中:

  GpsLon.onUpdate(longitudeChanged);

我想做这样的事情:

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

(就像我在Java脚本中做的那样!); 但这不是严格的方式。怎么做?

TNX

埃里克

1 个答案:

答案 0 :(得分:8)

看哪,强大的lambda!

#include <iostream>

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

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

If you'd like to learn more about them, take a look here

稍微解密一下,这里有一个细分:

  • 你有一个通过模板参数获取另一个函数的函数。
  • 该函数除了调用它的参数外什么都不做。
  • 在main中,用lambda作为参数调用该函数。
  • lambda可以分为三个部分[](捕获,现在不要过于担心)()函数参数,在这种情况下没有)和{ ... }(身体,就像任何其他功能一样)。

所以lambda部分就是这样:

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

这是一个lambda的另一个例子,它接受一个int并返回其值的两倍:

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